4. Cilium项目介绍:Cilium架构、Cilium与eBPF的关系、Cilium作为CNI的优势

Cilium 是当前云原生生态中最具代表性的 eBPF 原生 CNI 插件。它并非简单的网络插件,而是一个集网络、安全、可观测性于一体的数据平面与控制平面平台。理解 Cilium 的架构设计、它与 eBPF 的深度绑定关系,以及它相比传统 CNI 的差异化优势,是构建 eBPF 网络观测制品库的核心前置知识。

4.1 Cilium 核心架构

Cilium 采用“控制面-数据面”分离的经典架构,但数据面完全基于 eBPF 程序运行在内核中,而非依赖 iptables 或用户态代理。

架构核心组件:
  • Cilium Agent(DaemonSet):运行在每个 K8s 节点上,负责与 Kube-apiserver 交互,监听 Pod/Service/Endpoint 变化,编译并加载 eBPF 程序到内核。
  • Cilium Operator:负责集群级别的协调任务,如 IPAM(IP 地址管理)、CiliumNetworkPolicy 的全局状态处理。
  • Cilium CNI 插件:实现 CNI 标准的二进制插件,由 kubelet 调用,负责 Pod 网络接口的创建与 eBPF 数据路径的挂载。
  • eBPF 数据路径(内核态):包括 XDP、TC、cgroup/sockops、kprobe 等 hook 点,直接处理数据包转发、负载均衡、网络策略、可观测性数据采集。
  • Hubble(可选组件):基于 eBPF 的可观测性层,提供流日志、指标、服务依赖图。
Cilium 核心架构组件关系 Cilium Agent Cilium Operator Hubble (可观测) CNI 插件 (二进制) eBPF 数据路径 K8s API Server 架构要点: • Agent 监听 K8s 事件 → 生成 eBPF 程序 → 通过 bpf() syscall 加载到内核。 • 数据路径完全在内核态运行,无需 iptables 或 kube-proxy 用户态转发。 • Hubble 作为独立组件,从 eBPF map 中读取流数据,提供 L3/L4/L7 可观测性。

4.2 Cilium 与 eBPF 的关系

Cilium 是 eBPF 技术在容器网络领域最成功的“产品化”实现。二者关系可以概括为:eBPF 是底层能力,Cilium 是上层框架。

维度 eBPF(底层技术) Cilium(上层框架)
定位 Linux 内核可编程沙箱,允许安全注入字节码 基于 eBPF 的 CNI + 网络安全 + 可观测性平台
编程接口 提供 bpf() syscall、BPF maps、helper 函数 提供 CRD(CiliumNetworkPolicy、CiliumEndpoint)、CLI、API
数据面实现 XDP、TC、cgroup/sockops、kprobe 等 hook 点 自动编译 C 代码为 eBPF 字节码,分发并加载到对应 hook
可观测性 提供 perf_event、trace_pipe、BPF iterators 封装为 Hubble 流日志、Prometheus 指标、Grafana 面板
安全策略 通过 BPF 程序实现包过滤、连接跟踪 提供 L3/L4/L7 网络策略,支持 HTTP/gRPC/Kafka 协议过滤
关键理解:没有 eBPF,Cilium 无法实现高性能数据面;没有 Cilium,eBPF 在 K8s 中的使用门槛极高。Cilium 将 eBPF 的原始能力封装为 K8s 原生 API,让运维人员通过 YAML 声明式管理网络与安全策略,而无需编写 C 代码或理解内核细节。

4.3 Cilium 作为 CNI 的核心优势

相比 Flannel(vxlan/host-gw)、Calico(iptables/IPIP)、Weave 等传统 CNI,Cilium 基于 eBPF 带来了以下差异化优势:

  • 性能优势:数据包转发路径更短。eBPF 程序直接在内核网络栈的早期 hook(XDP/TC)处理包,绕过 iptables 的线性规则遍历和用户态代理的上下文切换。在吞吐量、延迟、CPU 开销上均优于传统方案。
  • 可扩展性:eBPF map 支持高效的连接跟踪与负载均衡状态管理,无需依赖 conntrack 模块。在大量 Service 和 Endpoint 场景下,性能退化远小于 iptables 模式。
  • 安全策略原生性:支持 L3/L4/L7 网络策略,且策略执行点位于内核数据路径中,无需 sidecar 代理。策略变更通过 CRD 下发,Agent 动态更新 eBPF 程序,实现毫秒级生效。
  • 可观测性内置:Hubble 组件利用 eBPF 自动采集流日志、TCP 状态、DNS 解析、HTTP 请求等数据,无需手动埋点或部署额外采集器。
  • 无 kube-proxy 模式:Cilium 可以完全替代 kube-proxy,通过 eBPF 实现 Service 负载均衡(ClusterIP/NodePort/LoadBalancer),消除 iptables 规则爆炸问题。
Cilium vs 传统 CNI 数据路径对比 传统 CNI (iptables/IPIP) ① 内核网络栈 → iptables PREROUTING ② iptables 规则遍历 (线性 O(n)) ③ conntrack 连接跟踪 ④ 隧道封装/解封装 (IPIP/VXLAN) Cilium (eBPF 原生) ① XDP/TC hook 直接接管 ② eBPF map 查表 (O(1) 哈希) ③ 负载均衡 / 策略执行 (内核态) ④ 直接转发 / 封装 (可选) vs • 传统 CNI 路径长、依赖 iptables 线性遍历和 conntrack,高并发下 CPU 开销大。 • Cilium 路径短、eBPF map 查表 O(1)、策略与转发均在内核态完成,延迟与吞吐量优势明显。
选型注意:虽然 Cilium 优势显著,但引入 eBPF 要求 Linux 内核版本 ≥ 5.10(推荐 5.15+),且部分功能(如 Bandwidth Manager、BGP)需要特定内核配置。在老旧内核环境(如 CentOS 7 的 3.10 内核)中无法使用,需评估升级成本。