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 将流量重定向到代理。
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 进行策略匹配。
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 是否已被正确替换。