1. Cilium 基础概念

1.1 Cilium 是什么

Cilium 是一个基于 eBPF(extended Berkeley Packet Filter)技术的开源网络、安全与可观测性项目,专为云原生环境(尤其是 Kubernetes)设计。它利用 Linux 内核的 eBPF 能力,在无需修改应用代码或加载内核模块的前提下,动态注入安全策略、网络路由与负载均衡逻辑。

Cilium 的核心定位是“云原生网络的下一代数据平面”,它替代了传统的 iptables/IPVS 模式,将网络策略的执行点从用户空间下沉到内核空间,从而获得更高的性能与更低的延迟。

关键特性:
  • 身份感知(Identity-Aware): 基于 Kubernetes 标签(Label)而非 IP 地址定义安全策略,适应 Pod 动态迁移。
  • L3/L4 到 L7 全栈策略: 支持 HTTP、gRPC、Kafka 等应用层协议过滤。
  • 透明加密: 通过 WireGuard 或 IPsec 实现节点间通信加密。
  • 可观测性: 提供 Hubble 组件,实时监控网络流量与策略命中情况。

1.2 eBPF 技术原理

eBPF 是一项允许用户在 Linux 内核中安全运行沙箱化程序的技术。Cilium 利用 eBPF 实现数据包处理、策略执行与负载均衡,而无需修改内核源码或加载内核模块。

eBPF 数据包处理流程 用户空间(User Space) 内核空间(Kernel Space)— eBPF 程序挂载点 网络驱动 / 套接字层(Network Driver / Socket) eBPF 程序类型 XDP(最早)→ TC(流量控制)→ cgroup/skb(套接字)→ LSM(安全模块)

eBPF 的核心工作流程:

  1. 编写与验证: 开发者使用 C 语言编写 eBPF 程序,通过 LLVM 编译为 BPF 字节码,经内核验证器(Verifier)检查安全性。
  2. 加载与 JIT 编译: 使用 bpf() 系统调用将字节码加载到内核,内核即时编译(JIT)为本地机器指令。
  3. 挂载到钩子点: 将程序挂载到网络事件(XDP、TC)、系统调用、跟踪点等内核钩子。
  4. 事件驱动执行: 每当触发对应事件(如收到数据包),eBPF 程序在内核态执行,通过 Map 与用户空间交互。
为什么 Cilium 选择 eBPF? 传统 iptables 规则链在 Pod 数量超过 1000 时性能急剧下降,而 eBPF 将策略执行点从用户空间 iptables 下沉到内核 XDP/TC 层,延迟降低 60% 以上,规则更新无需重建整个链。

1.3 Cilium 架构组件

Cilium 采用微服务架构,核心组件包括 Agent、Operator 和 CNI 插件,三者协同完成网络配置、策略分发与生命周期管理。

Cilium 核心架构组件 Kubernetes API Server Cilium Agent DaemonSet(每节点一个) Cilium Operator Deployment(集群级) Cilium CNI 二进制插件(/opt/cni/bin/) 组件协作关系 Agent 监听 API Server → 生成 eBPF 程序 → 通过 CNI 配置 Pod 网络命名空间 Operator 处理集群级任务(身份分配、端点清理、故障恢复)
组件 部署模式 核心职责
Cilium Agent DaemonSet(每节点一个) 管理 eBPF 程序、策略执行、服务负载均衡、与 kubelet 交互配置 Pod 网络
Cilium Operator Deployment(集群级) 身份(Identity)管理、端点垃圾回收、网络策略状态协调、多集群服务
Cilium CNI 二进制插件 实现 CNI 标准接口(ADD/DEL/CHECK),将 Pod 加入 Cilium 网络并分配 IP
注意: Cilium Agent 是唯一直接操作 eBPF 的组件,Operator 不直接接触内核。如果 Agent 异常退出,该节点上的已有网络连接不受影响,但新 Pod 无法加入网络,直到 Agent 恢复。

1.4 Cilium 与 Kubernetes 的关系

Cilium 作为 Kubernetes 的 CNI 插件,深度集成 Kubernetes 的原生资源模型,将 Kubernetes 的 Service、Pod、NetworkPolicy 等抽象直接映射为 eBPF 程序。

Kubernetes 资源 Cilium 映射方式 优势
Pod 通过 CNI 分配 IP,注入 eBPF 端点(Endpoint) 无需 iptables NAT,直接通过 eBPF Map 转发
Service eBPF 实现 kube-proxy 替代(Maglev/随机一致性哈希) 无 conntrack 瓶颈,连接跟踪性能提升 5 倍
NetworkPolicy 基于标签的身份(Security Identity)生成 eBPF 策略 支持 L7 协议过滤,策略更新毫秒级生效
Ingress / Gateway API 通过 Envoy 集成实现 L7 流量管理 统一南北向与东西向策略

Cilium 不修改 Kubernetes 核心代码,而是通过标准的 CRD(Custom Resource Definition)扩展 Kubernetes API,例如 CiliumNetworkPolicy、CiliumEndpoint、CiliumIdentity。这些 CRD 由 Cilium Operator 维护,Agent 通过 Watch 机制实时同步。

关键集成点:
  • kube-proxy 替代: Cilium 可以完全接管 Service 负载均衡,无需部署 kube-proxy。
  • Hubble 可观测性: 基于 eBPF 的流量监控,与 Kubernetes 标签无缝关联。
  • ClusterMesh: 跨 Kubernetes 集群的 Pod IP 路由,实现多集群服务互联。

总结来说,Cilium 将 Kubernetes 的声明式网络意图转化为内核级 eBPF 指令,实现了“声明式 API + 高性能数据平面”的云原生网络范式。理解这些基础概念,是后续掌握策略迁移与蓝绿发布灾备回滚的前提。