Cilium 架构概览:核心组件与关系

Cilium 并非单一二进制,而是由多个协同工作的组件构成。理解 Cilium Agent、Cilium Operator、Cilium CNI 插件以及 Hubble 之间的关系,是进行网络策略调试与验证的基础。每个组件承担不同职责,共同实现基于 eBPF 的数据平面与可观测性。

核心组件职责对比

组件 运行位置 核心职责 调试关注点
Cilium Agent 每个 Kubernetes 节点(DaemonSet) 管理 eBPF 程序、实现网络策略、服务负载均衡、与 Kubernetes API 交互 策略是否下发、eBPF map 状态、节点连通性
Cilium Operator 集群中任意节点(Deployment) 处理集群级任务:IPAM(IP 地址管理)、身份(Identity)分配、多集群网络 身份是否冲突、IP 池是否耗尽、集群状态一致性
Cilium CNI 插件 每个节点(二进制文件 + DaemonSet 触发) 响应 kubelet 的 CNI 调用,为 Pod 配置网络接口和 IP Pod 是否获得正确 IP、接口是否创建成功
Hubble 每个节点(DaemonSet)+ 集群级(Deployment) 提供网络流量的可观测性、服务依赖图、策略审计 流量是否被记录、策略拒绝事件是否可见

组件交互流程

下图展示了 Cilium 各组件在 Kubernetes 集群中的部署形态与数据流关系。注意 Agent 与 Operator 的分工:Agent 处理节点本地数据平面,Operator 处理集群全局控制面。

Cilium 核心组件架构关系图 Cilium 组件架构与交互关系 Kubernetes API Server Kubernetes 节点 1 Cilium Agent Cilium CNI 插件 Hubble Relay (节点) eBPF 数据平面 Pod A (app=web) Pod B (app=api) Kubernetes 节点 2 Cilium Agent Cilium CNI 插件 Hubble Relay (节点) eBPF 数据平面 Pod C (app=db) Cilium Operator (集群) Hubble UI (集群) Cilium Agent CNI 插件 Hubble eBPF Pod Operator / API Server
调试切入点:当 Pod 网络策略不生效时,优先检查目标节点上的 cilium agent 日志(kubectl -n kube-system logs ds/cilium -c cilium-agent),确认策略是否被正确解析并写入 eBPF map。Hubble 则用于验证流量是否被策略允许或拒绝。

组件间关键交互详解

1. Cilium Agent ↔ Kubernetes API Server

Agent 通过 watch 机制监听 Pod、Service、NetworkPolicy、EndpointSlice 等资源变化。当新的网络策略创建时,Agent 立即收到事件,将其转换为 eBPF 程序并加载到内核。

2. Cilium Agent ↔ Cilium CNI 插件

CNI 插件由 kubelet 调用,负责为新建 Pod 创建网络接口。插件将 Pod 信息传递给本节点 Agent,Agent 为该 Pod 分配 IP 并设置 eBPF 转发规则。两者通过 Unix Socket 通信。

3. Cilium Operator ↔ 全局身份管理

Operator 维护集群级别的安全身份(Security Identity)池。当新 Pod 启动时,Agent 向 Operator 请求身份标识。身份是策略匹配的核心依据,身份冲突会导致策略误判。

4. Hubble ↔ Cilium Agent

Hubble 从 Agent 的 eBPF map 中读取流量统计和事件数据。Hubble Relay 组件聚合所有节点的数据,提供全局视图。Hubble UI 提供可视化界面,用于策略审计和故障排查。

关键调试命令速查:
# 查看 Agent 状态与策略
kubectl -n kube-system exec ds/cilium -- cilium status
kubectl -n kube-system exec ds/cilium -- cilium policy get

# 查看 Hubble 流量
kubectl -n kube-system exec ds/cilium -- hubble observe --from-pod default/my-pod

# 查看 Operator 日志
kubectl -n kube-system logs deployment/cilium-operator

组件部署拓扑总结

下表从调试视角总结了各组件的部署形态与关键检查点:

组件 Kubernetes 资源类型 默认命名空间 调试关键命令
Cilium Agent DaemonSet kube-system cilium status, cilium policy get
Cilium Operator Deployment kube-system kubectl logs deployment/cilium-operator
Cilium CNI 插件 DaemonSet (cilium-cni) kube-system 检查节点 /etc/cni/net.d/ 配置
Hubble Relay Deployment kube-system hubble observe
Hubble UI Deployment kube-system 访问 UI 服务查看服务图
常见误区:不要混淆 Cilium Agent 与 Cilium Operator 的职责。Agent 处理节点本地数据平面,Operator 处理集群全局控制面。如果策略在部分节点生效而在其他节点不生效,问题通常出在 Agent 而非 Operator。如果身份分配异常或 IP 池耗尽,则优先排查 Operator。