Cilium 与 eBPF 基础:架构、原理与优势

本章深入解析 Cilium 的核心技术栈——eBPF 技术原理、Cilium 的整体架构、作为 CNI 插件的独特优势,以及它与传统 kube-proxy 组件的关系。理解这些基础是构建多租户隔离集群的必备前提。

2.1 Cilium 整体架构

Cilium 是一个基于 eBPF 的云原生网络、安全与可观测性解决方案。其架构分为控制平面与数据平面两部分,通过 Kubernetes 原生 API 驱动 eBPF 程序动态注入 Linux 内核。

架构核心组件:
  • Cilium Agent:运行在每个节点上的 DaemonSet,负责与 Kubernetes API Server 交互,管理本地 eBPF 程序与策略。
  • Cilium Operator:处理集群级别的任务,如 IPAM(IP 地址管理)、Service 负载均衡、网络策略聚合。
  • KV Store(可选):用于跨节点状态同步(如 etcd),在大型集群中提升一致性。
  • eBPF 数据路径:直接在内核中执行网络转发、策略过滤与负载均衡,无需 iptables 或用户态代理。
Cilium 架构组件关系图 Cilium 架构组件关系图 Kubernetes API Server Cilium Operator Cilium Agent (DaemonSet) KV Store (etcd) eBPF 数据路径 (内核) 说明: Cilium Agent 直接管理节点上的 eBPF 程序,Operator 处理集群级任务。 KV Store 在大型集群中用于跨节点状态同步,非必需组件。

2.2 eBPF 技术原理

eBPF(extended Berkeley Packet Filter)是一项革命性的 Linux 内核技术,允许用户在不修改内核源码或加载内核模块的情况下,安全高效地在内核中运行沙箱化程序。Cilium 正是利用 eBPF 实现了高性能网络与安全策略。

特性 传统方式(iptables/内核模块) eBPF 方式
执行位置 用户态代理或内核模块 内核态沙箱,直接在内核中执行
安全性 内核模块可能引发系统崩溃 验证器确保程序安全,不会导致内核崩溃
性能 数据包需多次进出内核态 单次内核内处理,延迟极低
可编程性 规则静态,变更需重启服务 动态加载,热更新,无需重启
可观测性 有限,需额外工具 原生支持追踪、指标、日志
关键概念:eBPF 程序通过 bpf() 系统调用加载到内核,经过验证器(Verifier)检查后,附加到钩子点(如网络设备、系统调用、跟踪点)。Cilium 主要使用 XDP(eXpress Data Path)和 TC(Traffic Control)钩子实现网络数据路径。

2.3 Cilium 作为 CNI 的优势

相比传统 CNI 插件(如 Flannel、Calico),Cilium 凭借 eBPF 技术提供了显著优势,尤其在多租户隔离场景中表现突出。

  • 高性能网络:eBPF 绕过 iptables 和用户态代理,实现接近原生内核的转发性能,延迟降低 30%-50%。
  • 精细化安全策略:支持 L3/L4 到 L7(HTTP/gRPC/Kafka)的完整网络策略,基于身份(Identity)而非 IP 地址,适应动态 Pod 环境。
  • 原生可观测性:通过 Hubble 组件提供实时流量可视化、服务依赖图、TCP 指标,无需 sidecar 代理。
  • 多租户隔离:结合 CiliumNetworkPolicy 和 CiliumClusterwideNetworkPolicy,实现租户级别的零信任网络隔离。
  • 无 kube-proxy 模式:Cilium 可以完全替代 kube-proxy,使用 eBPF 实现 Service 负载均衡,消除 iptables 性能瓶颈。
Cilium 与传统 CNI 性能对比 Cilium 与传统 CNI 性能对比 传统 CNI 延迟: 高 吞吐: 低 Cilium (eBPF) 延迟: 低 吞吐: 高 基于 eBPF 的数据路径减少了内核态与用户态切换,显著提升网络性能。

2.4 Cilium 与 kube-proxy 的关系

kube-proxy 是 Kubernetes 中负责实现 Service 负载均衡的传统组件,通常基于 iptables 或 IPVS。Cilium 提供了完全替代 kube-proxy 的能力,通过 eBPF 实现更高效的 Service 转发。

对比维度 kube-proxy (iptables 模式) Cilium (eBPF 替代模式)
数据路径 iptables 规则链,线性匹配 eBPF map 哈希查找,O(1) 复杂度
性能扩展性 Service 数量增多时规则爆炸,延迟飙升 万级 Service 仍保持低延迟
负载均衡算法 仅支持随机或轮询 支持 Maglev、随机、轮询,一致性哈希
外部流量策略 需额外配置 externalTrafficPolicy 原生支持 DSR(Direct Server Return)
部署方式 默认安装,作为 DaemonSet 运行 通过 kubeProxyReplacement=true 完全接管
实践注意:启用 Cilium 的 kube-proxy 替代模式时,需确保集群节点内核版本 ≥ 5.10,并关闭原有的 kube-proxy 组件。Cilium 会自动接管 ClusterIP、NodePort、LoadBalancer 等 Service 类型,并提供更丰富的可观测性指标。