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 处理集群全局控制面。
调试切入点:当 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。