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 或用户态代理。
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 性能瓶颈。
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 类型,并提供更丰富的可观测性指标。