1. Cilium 架构总览:组件、eBPF 数据路径与 kube-proxy 关系

Cilium 是一个基于 eBPF(extended Berkeley Packet Filter)的 Kubernetes 网络、安全与可观测性解决方案。其核心设计理念是将数据平面与控制平面分离,利用 Linux 内核 eBPF 技术实现高性能的数据包处理,同时通过标准的 Kubernetes CRD(Custom Resource Definition)进行策略管理。理解 Cilium 的架构是进行集群排障、证书轮换与流量路径分析的基础。

1.1 Cilium 核心组件

Cilium 在 Kubernetes 集群中以 DaemonSet 和 Deployment 的形式部署,主要包含以下组件:

组件 部署类型 核心职责
Cilium Agent DaemonSet(每节点一个) 管理 eBPF 程序、配置网络接口、实现网络策略与负载均衡
Cilium Operator Deployment(通常 1-2 副本) 处理集群级任务:IPAM(IP 地址管理)、身份管理、KVStore 同步
CNI 插件 二进制文件(由 kubelet 调用) 实现 CNI 接口规范,为 Pod 配置网络命名空间与接口
Cilium CLI / Hubble 用户空间工具 提供命令行排障、流量可视化与可观测性数据采集
关键点: Cilium Agent 是数据平面的核心,它通过 gRPC 与 kube-apiserver 通信,监听 Pod、Service、NetworkPolicy 等资源变化,并将这些变化编译为 eBPF 程序挂载到内核中。

1.2 eBPF 数据路径

eBPF 是 Cilium 实现高性能网络的关键技术。与传统 iptables 或 IPVS 模式不同,eBPF 程序直接在内核中运行,避免了频繁的用户态与内核态上下文切换。Cilium 的数据路径主要涉及以下 eBPF 挂载点:

  • XDP(eXpress Data Path): 在网卡驱动层处理数据包,适用于 DDoS 防护与高性能转发。
  • TC(Traffic Control) ingress/egress: 在协议栈入口/出口处处理 Pod 与节点的网络流量。
  • Socket BPF(cgroup/sockops): 在 socket 层直接路由流量,实现 socket-level 负载均衡。
  • L7 Proxy(Envoy): 用于 HTTP/gRPC 等七层策略执行,Cilium 通过 eBPF 将流量重定向到代理。
Cilium eBPF 数据路径架构 Cilium eBPF 数据路径架构 用户空间 Cilium Agent / 控制面 Linux 内核空间 (eBPF) XDP (网卡驱动) TC ingress/egress Socket BPF L7 Proxy 数据路径说明 1. 数据包从网卡进入 XDP 层进行早期过滤 2. 经 TC 层进行 Pod 网络策略与封装/解封装 3. Socket BPF 实现 socket 级负载均衡,L7 Proxy 处理七层策略

1.3 Cilium 与 kube-proxy 的关系

在传统 Kubernetes 集群中,kube-proxy 负责实现 Service 的 ClusterIP、NodePort 与 LoadBalancer 类型的负载均衡。Cilium 提供了 完全替代 kube-proxy 的能力,通过 eBPF 实现更高效的服务转发。

对比维度 kube-proxy (iptables/IPVS) Cilium (eBPF)
数据路径 用户态 iptables 规则遍历,O(n) 复杂度 内核态 eBPF 哈希查找,O(1) 复杂度
性能 大规模 Service 下规则膨胀,延迟增加 线性扩展,延迟低且稳定
功能 仅支持四层负载均衡 四层 + 七层负载均衡,支持 L7 策略
可观测性 依赖额外工具(如 conntrack) 原生 Hubble 流量可视化,支持 Prometheus 指标
部署模式 默认 DaemonSet 运行 可完全禁用 kube-proxy,由 Cilium 接管
生产建议: 在新建集群中,推荐直接使用 cilium install --set kubeProxyReplacement=true 完全替代 kube-proxy。这不仅能降低延迟,还能减少节点上的 iptables 规则数量,提升排障效率。

1.4 CRD 驱动的策略模型

Cilium 通过 Kubernetes CRD 扩展 API,实现网络策略与安全策略的声明式管理。核心 CRD 包括:

  • CiliumNetworkPolicy: 基于身份(Identity)的 L3/L4 网络策略,支持标签选择器与 CIDR。
  • CiliumClusterwideNetworkPolicy: 集群范围的网络策略,适用于节点级或跨命名空间策略。
  • CiliumEndpoint: 记录每个 Pod 的 eBPF 身份与网络状态,用于排障与可观测性。
  • CiliumIdentity: 将安全标签映射为数字身份,eBPF 程序基于身份而非 IP 进行策略匹配。
Cilium CRD 与身份映射流程 Cilium CRD 与身份映射流程 kube-apiserver Cilium Operator Cilium Agent CiliumIdentity CRD eBPF Map (身份表) 身份映射流程 Pod 创建 → Cilium Agent 上报标签 → Operator 分配数字身份 → 写入 CiliumIdentity CRD → Agent 同步到 eBPF Map

1.5 架构总结

Cilium 的架构设计体现了“控制面与数据面分离”的现代网络理念:

  • 控制面: Cilium Operator 与 CRD 负责身份分配、策略编排与集群状态管理。
  • 数据面: Cilium Agent 通过 eBPF 在内核中执行转发、负载均衡与策略过滤,无需修改应用代码。
  • 可观测性: Hubble 组件基于 eBPF 事件采集流量元数据,提供实时拓扑与排障能力。
排障提示: 当遇到网络连通性问题时,首先检查 Cilium Agent 日志(kubectl logs -n kube-system cilium-xxxx)以及 cilium status 命令的输出。确认 eBPF 程序是否正常加载、身份映射是否完整、以及 kube-proxy 是否已被正确替换。