Cilium 是一种云原生的解决方案,通过 Linux 内核的 eBPF(扩展的 Berkeley 包过滤器)技术增强了工作负载间网络的安全性和可见性。这篇博客将探讨 Cilium 在 Kubernetes 中的工作原理、eBPF 的角色,以及如何将 Cilium 与监控工具如 Prometheus 和 Grafana 集成。
你知道Cilium是什么吗?
Cilium 使用名为 CiliumNetworkPolicy 的网络策略来为 Kubernetes 工作负载之间提供安全网络连接。它处理 Kubernetes 中的各种网络通信,包括但不限于:
- 容器间的通信
- Pod间的通信(Cluster IP)
- Pod到服务的通信(NodePort)
- 与外部的通信(Ingress和Egress)
Cilium 通过监控和解决各种网络问题(如 DNS、第 4 层(Layer 4)TCP 和第 7 层问题)来增强网络安全性。例如,它可以检测最近十分钟内的 DNS 解析失败或追踪未被回应的 TCP SYN 请求和通信超时。此外,Cilium 监控集群中的 HTTP 响应代码和延迟百分位数,提供第 7 层应用可见性和控制,允许您过滤 HTTP 路径、请求方法或域名。
配置与整合:Cilium的配置分为两个实体:主配置存储在一个名为cilium-config
的配置映射中,而网络策略则是通过自定义资源定义(CRD)来实现的。eBPF在Cilium的功能中扮演着关键角色,特别是在可观测性和安全性方面,使用像Hubble和Prometheus这样的工具来进行监控和故障排除。
在传统的Linux网络安全中,iptables
用于过滤IP地址和TCP/UDP端口。然而,在动态微服务环境中,IP地址经常变化,维护连接和扩展变得具有挑战性。Cilium通过利用eBPF解决了这个问题。eBPF提供了动态可见性,并能高效更新访问控制列表。
eBPF(扩展的伯克利包过滤器)是一种革命性的技术,允许在内核层面高效地修改和分析网络包,无需改动应用程序代码。Linux内核在网络堆栈中支持多种eBPF钩子,比如Cilium利用的包括:
学习频道-科技 (https://github.com/gary-RR/myYouTube_cilium_part1)
这些挂钩与虚拟接口(如 cilium_host、cilium_net 和可选的 cilium_vxlan 覆盖接口)结合使用,以及像 Envoy 这样的用户空间代理,增强了可观测性、安全性、网络连接和负载均衡。
eBPF在内核运行时中运行,提供了显著的好处,在可观测性能力、安全控制、网络、网络安以及负载均衡等方面。如C++、Go和R这样的编程语言可以通过eBPF SDK创建增强这些功能的程序。
学习频道 链接
利用eBPF映射表eBPF程序利用eBPF映射表来存储和检索各种数据结构中的数据。这些映射表可以从eBPF程序和应用程序中访问,从而使得复杂的操作成为可能并增强了网络的安全性。例如,它是这样工作的:
2. Kubernetes 中使用 eBPF 和 Cilium:
在 Kubernetes 环境下,eBPF 在高效管理网络数据流方面起着关键作用。
准备工作。
安装 kubectl
,这是 Kubernetes 的命令行工具。
部署 Cilium 和监控工具的步骤如下
curl -LO https://raw.githubusercontent.com/cilium/cilium/1.15.5/Documentation/installation/kind-config.yaml kind create cluster --config=kind-config.yaml
2. 安装 kubectl:
# 下载 kubectl.sha256 文件 curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" # 检查 sha256 哈希值 echo "$(cat kubectl.sha256) kubectl" | sha256sum --check # 安装 kubectl 到系统路径 sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl # 检查 kubectl 版本 kubectl version --client
3. 部署 Prometheus 和 Grafana: (用于监控和可视化)
kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/HEAD/examples/kubernetes/addons/prometheus/monitoring-example.yaml
4. 安装 Cilium:
下载 cilium 的 tarball 安装包并进入 kubernetes 的安装目录
请在你的终端中运行以下命令:
以下是用于从GitHub下载Cilium项目并解压到指定目录的命令:
curl -LO https://github.com/cilium/cilium/archive/main.tar.gz tar xzf main.tar.gz cd cilium-main/install/kubernetes
接下来我们要利用helm部署cilium并开启所有指标。
helm install cilium ./cilium \ --命名空间 kube-system \ --设置 prometheus.enabled=true \ --设置 operator.prometheus.enabled=true \ --设置 hubble.enabled=true \ --设置 hubble.metrics.enableOpenMetrics=true \ --设置 hubble.metrics.enabled={"dns","drop","tcp","flow","port-distribution","icmp","httpV2:示例=true;labelsContext=source_ip,source_namespace,source_workload,destination_ip,destination_namespace,destination_workload,traffic_direction"}
5. 访问 Grafana:
kubectl -n cilium-monitoring port-forward service/grafana - address 0.0.0.0 - address :: 3000:3000 可以通过localhost:3000访问
kubectl -n cilium-monitoring 端口转发 service/prometheus --address 0.0.0.0 --address :: 9090:9090
使用 Prometheus 和 Grafana 监控 Cilium
一旦Cilium和监控工具被部署,你可以访问Grafana仪表盘来查看Prometheus收集的指标。Grafana仪表板包括预加载的Cilium仪表板,提供关于Cilium环境健康状况及您Kubernetes集群内部网络流量的洞见。
Cilium 指标数据 控制面板
API指标
端点的CILIUM指标信息
Kubernetes 集成
哈勃指标在网络上的
结论
Cilium,由eBPF提供动力,为Kubernetes环境提供了网络的安全性和可观测性。通过与Prometheus和Grafana结合,您可以有效地监控和排查网络问题,确保云原生基础设施的安全和高效。