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 处理全局、非实时性的协调任务。这种分离保证了数据平面的高性能与控制平面的高可用。
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)条目。回滚时,只需将控制平面状态恢复到旧版本,数据平面会自动收敛。这是实现零停机回滚的关键机制。
2.4 关键总结与流水线集成启示
| 组件/平面 | 部署形态 | 对流水线的影响 |
|---|---|---|
| Cilium Agent | DaemonSet | 升级需滚动更新,影响节点本地网络;回滚需保证 eBPF 程序兼容 |
| Cilium Operator | Deployment | 升级影响 IPAM 与身份同步;回滚需处理状态兼容性 |
| Cilium CNI | 二进制插件 | 升级需协调 Kubelet;回滚需替换二进制并重启 kubelet |
| 数据平面 (eBPF) | 内核态 | 配置变更实时生效;回滚通过控制平面下发旧配置即可 |
| 控制平面 | 用户态 | 支持灰度发布与金丝雀部署;回滚策略需考虑 API 兼容性 |
流水线设计要点:在 CI/CD 流水线中,应优先对控制平面组件(Agent/Operator)进行灰度升级,验证无误后再逐步推进。数据平面的回滚通常比控制平面更快,因为只需通过 Agent 重新加载旧的 eBPF 配置,无需重启容器或节点。