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 的核心工作流程:
- 编写与验证: 开发者使用 C 语言编写 eBPF 程序,通过 LLVM 编译为 BPF 字节码,经内核验证器(Verifier)检查安全性。
- 加载与 JIT 编译: 使用
bpf()系统调用将字节码加载到内核,内核即时编译(JIT)为本地机器指令。 - 挂载到钩子点: 将程序挂载到网络事件(XDP、TC)、系统调用、跟踪点等内核钩子。
- 事件驱动执行: 每当触发对应事件(如收到数据包),eBPF 程序在内核态执行,通过 Map 与用户空间交互。
1.3 Cilium 架构组件
Cilium 采用微服务架构,核心组件包括 Agent、Operator 和 CNI 插件,三者协同完成网络配置、策略分发与生命周期管理。
| 组件 | 部署模式 | 核心职责 |
|---|---|---|
| Cilium Agent | DaemonSet(每节点一个) | 管理 eBPF 程序、策略执行、服务负载均衡、与 kubelet 交互配置 Pod 网络 |
| Cilium Operator | Deployment(集群级) | 身份(Identity)管理、端点垃圾回收、网络策略状态协调、多集群服务 |
| Cilium CNI | 二进制插件 | 实现 CNI 标准接口(ADD/DEL/CHECK),将 Pod 加入 Cilium 网络并分配 IP |
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 + 高性能数据平面”的云原生网络范式。理解这些基础概念,是后续掌握策略迁移与蓝绿发布灾备回滚的前提。