Cilium 基础回顾:架构、eBPF 核心与 kube-proxy 关系
在深入多集群镜像拉取的网络故障排查之前,必须牢固掌握 Cilium 的核心架构与运行原理。本章将拆解 Cilium 的关键组件(Agent、Operator、CNI)、eBPF 的核心作用,以及 Cilium 如何替代传统的 kube-proxy。
2.1 Cilium 整体架构
Cilium 采用 DaemonSet + Deployment 的部署模式,由两大核心组件构成:Cilium Agent(运行在每个节点上)和 Cilium Operator(集群级控制器)。CNI 插件负责与 kubelet 交互,触发网络接口的创建与策略注入。
关键理解:Cilium Agent 是数据面的核心,负责编译和加载 eBPF 程序;Cilium Operator 负责集群级协调,如身份管理、端点清理;CNI 插件是 kubelet 与 Agent 之间的桥梁。
2.2 核心组件详解
2.2.1 Cilium Agent
- 运行方式:DaemonSet,每个 Kubernetes 节点一个 Pod。
- 主要职责:
- 监听 Kubernetes API Server,获取 Pod、Service、NetworkPolicy 等资源变化。
- 将网络策略、服务转发规则编译为 eBPF 程序。
- 通过 BPF 系统调用将 eBPF 程序加载到内核的 hook 点(如 XDP、TC、cgroup)。
- 管理本地节点的 IP 地址分配(与 CNI 插件协作)。
- 故障排查关注点:Agent 日志、eBPF 程序加载状态、与 API Server 的连接健康。
2.2.2 Cilium Operator
- 运行方式:Deployment,通常 1~2 个副本。
- 主要职责:
- 身份管理:为每个安全相关的端点分配唯一的安全身份 ID。
- 端点清理:处理集群中残留的 Pod 网络端点。
- 负载均衡器 IP 分配(当使用 MetalLB 等集成时)。
- 集群网格(Cluster Mesh)的节点同步。
- 故障排查关注点:Operator 是否处于 Leader 选举状态、身份分配是否耗尽。
2.2.3 CNI 插件 (cilium-cni)
- 调用链:kubelet → CNI 插件 → Cilium Agent (通过 gRPC)。
- 主要职责:
- 接收 kubelet 的 ADD/DEL 命令。
- 调用 Agent 的 gRPC 接口,为 Pod 创建虚拟网络接口(veth pair)。
- 将 Pod 的网络命名空间与 Cilium 的 eBPF 数据面连接。
- 故障排查关注点:CNI 配置文件是否正确、Agent gRPC 是否可达。
2.3 eBPF 核心概念
eBPF 是 Cilium 的技术基石。它允许用户在 Linux 内核中安全地运行沙箱化程序,而无需修改内核源码或加载内核模块。
| 概念 | 说明 | 在 Cilium 中的应用 |
|---|---|---|
| BPF Hook | 内核中的预定义挂载点,如 XDP、TC、Socket、cgroup。 | Cilium 在 XDP 和 TC 层挂载程序,实现网络转发与策略执行。 |
| BPF Map | 内核与用户空间共享的数据结构(哈希表、数组等)。 | 存储端点信息、策略规则、服务映射表。 |
| BPF Program | 用 C 编写,编译为 BPF 字节码,通过 bpf() 系统调用加载。 | Cilium 动态生成 BPF 程序,实现 L3/L4/L7 策略。 |
| 尾调用 (Tail Call) | 一个 BPF 程序跳转到另一个,避免栈溢出。 | Cilium 使用尾调用链实现复杂的策略查找逻辑。 |
排查提示:当镜像拉取出现网络超时时,可以检查节点上
cilium bpf endpoint list 和 cilium bpf policy get 命令的输出,确认 eBPF Map 中的策略是否与预期一致。
2.4 Cilium 与 kube-proxy 的关系
Cilium 可以完全替代 kube-proxy,提供更高效、更灵活的服务负载均衡。这是通过 eBPF 在 XDP 或 TC 层直接实现 Service 转发实现的。
2.4.1 功能对比表
| 功能维度 | kube-proxy (iptables) | kube-proxy (IPVS) | Cilium (eBPF) |
|---|---|---|---|
| 转发机制 | 用户态 iptables 规则遍历 | 内核态 IPVS 哈希表 | 内核态 eBPF Map 直接查找 |
| 规则更新性能 | O(N),规则越多越慢 | O(1),但需维护 IPVS 表 | O(1),增量更新 |
| 高级特性 | 无 | 支持 Session Affinity | DSR、Maglev、L7 策略、带宽管理 |
| 可观测性 | 低(依赖 conntrack) | 中(IPVS 统计) | 高(Hubble 提供 L3/L4/L7 流日志) |
| 多集群支持 | 需额外组件 | 需额外组件 | 原生 Cluster Mesh |
故障排查注意:如果集群中同时运行 kube-proxy 和 Cilium(未启用
kubeProxyReplacement),可能导致 Service 转发冲突。建议在 Cilium 安装时设置 kubeProxyReplacement: strict 或 probe,并移除 kube-proxy DaemonSet。
2.5 本章小结
- Cilium 架构由 Agent(数据面)、Operator(控制面)、CNI 插件(接口层)组成。
- eBPF 是 Cilium 的核心,通过 Hook、Map、Program 实现高性能网络与安全策略。
- Cilium 可以完全替代 kube-proxy,提供更优的 Service 转发性能和更丰富的可观测性。
- 在多集群镜像拉取场景中,理解 Cilium 的 Service 转发机制是排查跨集群网络问题的前提。