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 核心架构组件关系图 Cilium 核心架构组件关系图 Kubernetes API Server Cilium Operator 身份管理 / 策略 分配 / 端点清理 Cilium Agent (Node 1) eBPF 程序管理 / 路由 Cilium Agent (Node N) eBPF 程序管理 / 路由 CNI 插件 (cilium-cni) CNI 插件 (cilium-cni) Linux 内核 eBPF Linux 内核 eBPF 数据面 控制面
关键理解: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 转发实现的。

Cilium 替代 kube-proxy 对比图 Cilium 替代 kube-proxy 对比 传统模式:kube-proxy (iptables/IPVS) Pod → Service ClusterIP → iptables NAT → 后端 Pod 用户态 → 内核态 iptables 遍历 → 性能瓶颈 Cilium 模式:eBPF Service Pod → Service ClusterIP → eBPF Map 查找 → 后端 Pod 内核态直接转发,无上下文切换,高性能 替代 关键差异 kube-proxy 依赖 iptables/IPVS 规则更新,大规模集群下规则变更慢、CPU 开销高。 Cilium 通过 eBPF 实现 Service 转发,规则更新 O(1),延迟更低,支持 DSR 和 Maglev。

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 转发机制是排查跨集群网络问题的前提。