Cilium 架构概览:核心组件与通信方式

Cilium 基于 eBPF(extended Berkeley Packet Filter)技术构建,其架构由多个协同工作的组件组成。理解这些组件及其通信方式是进行证书轮换作业与故障排查的基础。本章将详细拆解 Cilium 的四大核心组件:Agent、Operator、CNI 插件以及 Hubble,并分析它们之间的数据流与控制流。

2.1 核心组件总览

Cilium 采用去中心化的设计,每个 Kubernetes 节点上运行一个 Agent,而 Operator 则作为集群级别的控制器。下表总结了各组件的职责与部署形态:

组件 部署形态 核心职责 关键依赖
Cilium Agent DaemonSet(每节点一个) 管理 eBPF 程序、实现网络策略、服务负载均衡、与 kubelet 交互 kubelet、containerd/CRI-O、内核 eBPF 能力
Cilium Operator Deployment(通常 1-2 副本) 处理集群级任务:IPAM(IP 地址管理)、身份管理、Endpoint 同步 Kubernetes API Server
Cilium CNI 二进制插件(由 kubelet 调用) 将 Pod 接入 Cilium 网络,配置网络接口与路由 Cilium Agent(通过 Unix Socket)
Hubble DaemonSet + Deployment 可观测性:流量捕获、服务依赖图、网络策略审计 Cilium Agent(通过 gRPC)
故障排查要点: 在证书轮换场景中,Agent 与 Operator 之间的 TLS 通信、Agent 与 kubelet 之间的资源交互是最容易出故障的环节。Agent 的证书文件通常挂载在 /var/run/secrets/kubernetes.io/serviceaccount/ 或自定义 Secret 卷中。

2.2 组件通信方式与数据流

Cilium 组件间的通信分为控制面通信与数据面通信。控制面负责策略下发、身份同步;数据面负责实际的 Pod 流量转发。下图展示了组件间的核心通信路径:

Cilium 组件通信架构图 Kubernetes API Server Cilium Operator Cilium Agent (DaemonSet) Hubble Server kubelet Pod (eBPF 数据面) Watch/CRD Watch/CRD CNI 调用 / 资源上报 CRI 创建 Pod gRPC 流 eBPF 程序注入 说明:实线为控制面通信(gRPC/HTTP),虚线为数据面通信(eBPF 程序注入)。Agent 与 kubelet 的资源争抢通常发生在 CNI 调用与 Pod 创建阶段。

2.3 组件通信细节拆解

2.3.1 Cilium Agent ↔ kubelet

这是故障排查中最关键的通信对。当 kubelet 需要创建 Pod 时,会调用 Cilium CNI 插件。CNI 插件通过 Unix Socket(默认路径 /var/run/cilium/cilium.sock)向本节点的 Cilium Agent 请求网络配置。Agent 随后执行以下操作:

  • IPAM 分配: 从节点可用 IP 池中分配 IP 地址。
  • eBPF 程序加载: 为 Pod 创建网络命名空间并加载对应的 eBPF 程序。
  • 策略应用: 根据身份标签应用网络策略。

此过程涉及 资源争抢:当节点上 Pod 创建/删除频率极高时,Agent 的 eBPF 资源(如 Map 大小、程序数量)可能与 kubelet 的 Pod 管理产生竞争,导致 CNI 调用超时或失败。

2.3.2 Cilium Agent ↔ Kubernetes API Server

Agent 通过 Watch 机制监听 Pod、Service、Endpoint、NetworkPolicy 等资源的变化。每个 Agent 都会与 API Server 建立长连接。在证书轮换场景中,如果 Agent 的 ServiceAccount 证书过期,Watch 连接会中断,导致 Agent 无法感知策略更新。

常见故障模式: 证书轮换后,Agent 未自动重载新证书,导致 Watch 连接持续报错 certificate has expired or is not yet valid。此时需检查 Agent 日志中的 TLS 握手错误,并确认证书挂载路径是否正确。

2.3.3 Cilium Operator ↔ Kubernetes API Server

Operator 负责集群级别的协调工作,包括:

  • 身份管理: 为每个安全身份(Security Identity)分配全局唯一的 ID。
  • IPAM 池管理: 在集群范围内分配 CIDR 块给各节点。
  • Endpoint 同步: 确保所有节点的 Endpoint 信息一致。

Operator 与 API Server 的通信同样依赖 TLS 证书。如果 Operator 的证书轮换失败,可能导致 IPAM 分配停滞,新 Pod 无法获取 IP 地址。

2.3.4 Hubble ↔ Cilium Agent

Hubble 通过 gRPC 流从每个节点的 Cilium Agent 拉取流量元数据。Agent 将 eBPF 捕获的包信息(源/目的 IP、端口、协议、Verdict)实时推送给 Hubble。此通信使用本地 gRPC 连接,通常不涉及跨节点 TLS,但在 Hubble Relay(集群级聚合)场景下,需要 TLS 加密。

2.4 组件通信协议与端口清单

下表列出了组件间通信使用的协议与默认端口,便于故障排查时进行网络抓包或连接检查:

通信对 协议 默认端口 用途
Agent ↔ API Server HTTPS (TLS) 6443 Watch 资源、CRD 操作
Agent ↔ kubelet Unix Socket /var/run/cilium/cilium.sock CNI 调用
Agent ↔ Operator gRPC (TLS) 9964 身份分配、IPAM 请求
Hubble ↔ Agent gRPC (明文/TLS) 9965 流量元数据流
Operator ↔ API Server HTTPS (TLS) 6443 集群状态管理

2.5 证书轮换影响范围

证书轮换作业主要影响 控制面通信,特别是涉及 TLS 的连接。以下是一个简化的影响范围示意图:

证书轮换影响范围 受影响区域:TLS 控制面通信 Cilium Agent Cilium Operator API Server 证书轮换影响说明: 1. Agent 与 API Server 的 Watch 连接中断 → 策略与 Endpoint 更新延迟 2. Agent 与 Operator 的 gRPC 连接中断 → 身份分配与 IPAM 失败 3. 数据面(Pod 间通信)不受影响,但新 Pod 无法接入网络
关键结论: 证书轮换作业的核心风险在于 控制面通信中断。数据面(已建立的 eBPF 连接)在证书轮换期间通常保持正常,但新 Pod 的创建、策略更新、服务发现等功能会受到影响。故障排查时应优先检查 Agent 与 API Server 之间的 TLS 握手状态。