解读Cilium和eBPF:与Prometheus和Grafana的整合使用
2024/10/25 21:03:09
本文主要是介绍解读Cilium和eBPF:与Prometheus和Grafana的整合使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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利用的包括:
- XDP (eXpress Data Path): 在网络栈中最早处理数据包的地方执行 BPF 程序,此时还没有进行其他任何处理,非常适合于过滤恶意流量和 DDoS 防护。
- 入站和出站流量控制:附加到网络接口,在第 3 层处理之前运行,并访问数据包元数据。
- 套接字操作:附加到特定的 cgroup,在 TCP 事件期间运行。
- 套接字发送/接收:在每次 TCP 套接字发送操作中运行的挂钩。
学习频道-科技 (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程序和应用程序中访问,从而使得复杂的操作成为可能并增强了网络的安全性。例如,它是这样工作的:
- 处理数据包:
- 当一个数据包通过网络接口(如eth0)到达节点时,它由用户模式程序(例如foo.o)处理。用户模式程序会将数据包发送给内核代码,随后内核代码将数据包转发给eBPF映射。eBPF映射将存储这些数据包,并依据预设的安全规则来决定是否允许或阻止该流量。
2. Kubernetes 中使用 eBPF 和 Cilium:
在 Kubernetes 环境下,eBPF 在高效管理网络数据流方面起着关键作用。
- Pod 部署: 当一个部署命令创建一个 pod 时,etcd 服务管理服务端点信息,运行在 IPVS 模式的 kube-proxy 附加服务的 IP 地址,使用 IPVS 而不是 iptables 来分发网络流量。
- Cilium Agent:
- Cilium 使用 Cilium Agent 收集端点的 IP 地址。这些 IP 地址存储在 eBPF 映射中,并在服务映射表中持久化保存。
准备工作。
安装 kubectl
,这是 Kubernetes 的命令行工具。
部署 Cilium 和监控工具的步骤如下
- 使用 Kind 工具来创建一个 Kubernetes 集群:
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结合,您可以有效地监控和排查网络问题,确保云原生基础设施的安全和高效。
这篇关于解读Cilium和eBPF:与Prometheus和Grafana的整合使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享
- 2024-11-19将文件或目录压缩并保留到指定的固定目录怎么实现?-icode9专业技术文章分享
- 2024-11-19使用 tar 命令压缩文件并且过滤掉某些特定的目录?-icode9专业技术文章分享
- 2024-11-18Nacos安装入门教程
- 2024-11-18Nacos安装入门:轻松掌握Nacos服务注册与配置管理
- 2024-11-18Nacos配置中心入门:新手必读教程