解读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的关键特性

Cilium 通过监控和解决各种网络问题(如 DNS、第 4 层(Layer 4)TCP 和第 7 层问题)来增强网络安全性。例如,它可以检测最近十分钟内的 DNS 解析失败或追踪未被回应的 TCP SYN 请求和通信超时。此外,Cilium 监控集群中的 HTTP 响应代码和延迟百分位数,提供第 7 层应用可见性和控制,允许您过滤 HTTP 路径、请求方法或域名。

配置与整合:

Cilium的配置分为两个实体:主配置存储在一个名为cilium-config的配置映射中,而网络策略则是通过自定义资源定义(CRD)来实现的。eBPF在Cilium的功能中扮演着关键角色,特别是在可观测性和安全性方面,使用像Hubble和Prometheus这样的工具来进行监控和故障排除。

传统网络防护 vs. Cilium:

在传统的Linux网络安全中,iptables 用于过滤IP地址和TCP/UDP端口。然而,在动态微服务环境中,IP地址经常变化,维护连接和扩展变得具有挑战性。Cilium通过利用eBPF解决了这个问题。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程序和应用程序中访问,从而使得复杂的操作成为可能并增强了网络的安全性。例如,它是这样工作的:

  1. 处理数据包:
  • 当一个数据包通过网络接口(如eth0)到达节点时,它由用户模式程序(例如foo.o)处理。用户模式程序会将数据包发送给内核代码,随后内核代码将数据包转发给eBPF映射。eBPF映射将存储这些数据包,并依据预设的安全规则来决定是否允许或阻止该流量。

2. Kubernetes 中使用 eBPF 和 Cilium:

在 Kubernetes 环境下,eBPF 在高效管理网络数据流方面起着关键作用。

  • Pod 部署: 当一个部署命令创建一个 pod 时,etcd 服务管理服务端点信息,运行在 IPVS 模式的 kube-proxy 附加服务的 IP 地址,使用 IPVS 而不是 iptables 来分发网络流量。
  1. Cilium Agent:
  • Cilium 使用 Cilium Agent 收集端点的 IP 地址。这些 IP 地址存储在 eBPF 映射中,并在服务映射表中持久化保存。
使用 Prometheus 和 Grafana 来部署和监控 Cilium

准备工作。
安装 kubectl,这是 Kubernetes 的命令行工具。

部署 Cilium 和监控工具的步骤如下

  1. 使用 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
下载并创建一个配置为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访问
  1. 访问普罗米修斯系统
    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的整合使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程