2. Cilium 基础架构:eBPF 技术原理、Cilium 组件与数据/控制平面

本章深入剖析 Cilium 的核心技术栈。理解 eBPF 是理解 Cilium 一切能力的基础;掌握 Agent、Operator、CNI 三大组件的职责,以及数据平面与控制平面的分离架构,是后续设计流水线集成与回滚策略的前提。

2.1 eBPF 技术原理:Cilium 的基石

eBPF(extended Berkeley Packet Filter)是一项革命性的 Linux 内核技术,允许用户在无需修改内核源码或加载内核模块的情况下,安全、高效地注入沙箱化的程序。Cilium 正是利用 eBPF 实现了网络、可观测性与安全能力的全面卸载。

特性 传统 iptables / 内核模块 eBPF 方案(Cilium)
编程方式 规则匹配 / 编译进内核 沙箱化字节码,动态注入
性能开销 线性规则遍历,高延迟 JIT 编译,哈希查找,低延迟
可编程性 受限,扩展困难 C / Rust 编写,灵活扩展
安全隔离 模块崩溃导致内核 panic 验证器确保安全,拒绝危险程序
观测能力 有限,需额外工具 内置 Map 与 Perf Event,原生可观测
关键流程:eBPF 程序通过 bpftool 或 Cilium Agent 加载到内核,经过验证器(Verifier)检查后,由 JIT 编译器转换为原生指令,挂载到钩子点(如 XDP、TC、cgroup)。程序通过 eBPF Maps 与用户态或其它内核程序共享数据。

2.2 Cilium 核心组件:Agent、Operator、CNI

Cilium 采用微服务架构,由多个协同工作的组件构成。在 Kubernetes 集群中,以下三个组件最为关键:

  • Cilium Agent(DaemonSet):运行在每个集群节点上,是数据平面的核心执行者。负责加载 eBPF 程序、管理网络策略、处理 Service 负载均衡、收集可观测性指标。
  • Cilium Operator(Deployment):集群级别的控制平面组件。负责处理集群范围的协调任务,如 IP 地址管理(IPAM)、节点间身份同步、Endpoint 清理、以及处理与 Kubernetes API Server 的交互。
  • Cilium CNI(二进制插件):Kubelet 调用的 CNI 二进制文件。负责将 Pod 的网络命名空间接入 Cilium 管理的网络,并触发 Agent 为 Pod 创建对应的 eBPF 端点。
职责边界:Agent 处理节点本地、实时性要求高的任务;Operator 处理全局、非实时性的协调任务。这种分离保证了数据平面的高性能与控制平面的高可用。
Cilium 核心组件架构图 Kubernetes 集群 Node 1 Cilium Agent (DaemonSet) 加载 eBPF · 策略执行 · Service LB Pod A eth0 (veth) Pod B eth0 (veth) Cilium CNI (二进制插件) Kubelet 调用 · 网络命名空间接入 Linux 内核 eBPF 运行时 Cilium Operator (Deployment) IPAM · 身份同步 · Endpoint 清理 Kubernetes API Server Watch / Update 资源 Watch

2.3 数据平面与控制平面

Cilium 的架构严格遵循数据平面与控制平面分离的设计原则,这与 SDN 和现代云原生理念一脉相承。

2.3.1 数据平面(Data Plane)

  • 位置:每个节点的 Linux 内核中,由 Cilium Agent 管理的 eBPF 程序构成。
  • 职责:处理所有数据包的转发、封装/解封装、负载均衡、网络策略过滤、以及可观测性数据的采集。
  • 特点:无锁、无上下文切换、完全在内核态运行,性能极高。

2.3.2 控制平面(Control Plane)

  • 位置:用户态进程,包括 Cilium Agent(本地控制逻辑)和 Cilium Operator(全局控制逻辑)。
  • 职责:监听 Kubernetes 资源变化(如 Service、Endpoint、NetworkPolicy),计算期望状态,并通过 BPF 系统调用将配置下发到数据平面。
  • 特点:事件驱动,异步协调,保证最终一致性。
架构启示:在流水线集成中,控制平面的变更(如更新 NetworkPolicy)不会直接影响正在进行的连接,因为数据平面持有现有的连接跟踪(Conntrack)条目。回滚时,只需将控制平面状态恢复到旧版本,数据平面会自动收敛。这是实现零停机回滚的关键机制。
数据平面与控制平面分离架构 控制平面 (Control Plane) Cilium Agent 本地协调 Cilium Operator 全局协调 Kubernetes API Server 资源 Watch / Update 数据平面 (Data Plane) Linux 内核 eBPF 运行时 XDP / TC 钩子 · eBPF Maps 网络策略 · Service LB · 可观测性 连接跟踪 (Conntrack) 网络接口 (eth0 / veth) BPF 系统调用 下发配置

2.4 关键总结与流水线集成启示

组件/平面 部署形态 对流水线的影响
Cilium Agent DaemonSet 升级需滚动更新,影响节点本地网络;回滚需保证 eBPF 程序兼容
Cilium Operator Deployment 升级影响 IPAM 与身份同步;回滚需处理状态兼容性
Cilium CNI 二进制插件 升级需协调 Kubelet;回滚需替换二进制并重启 kubelet
数据平面 (eBPF) 内核态 配置变更实时生效;回滚通过控制平面下发旧配置即可
控制平面 用户态 支持灰度发布与金丝雀部署;回滚策略需考虑 API 兼容性
流水线设计要点:在 CI/CD 流水线中,应优先对控制平面组件(Agent/Operator)进行灰度升级,验证无误后再逐步推进。数据平面的回滚通常比控制平面更快,因为只需通过 Agent 重新加载旧的 eBPF 配置,无需重启容器或节点。