Cilium 架构基础:组件、数据面转发路径与资源消耗宏观来源

Cilium 的架构设计围绕 控制面 与 数据面 分离的原则展开。理解其核心组件、数据包穿越 eBPF 程序的路径,以及资源消耗的宏观来源,是后续进行资源画像与联合优化的前提。本章将拆解这三个基础维度。

2.1 核心组件与职责

Cilium 部署在 Kubernetes 集群中时,主要由以下四个关键组件构成,它们各自承担不同的生命周期与数据面职责:

组件 部署模式 核心职责 资源消耗特征
Cilium Agent DaemonSet(每节点一个) 管理 eBPF 程序加载、端点(Pod)生命周期、策略规则下发、与 Kubernetes API Server 交互 CPU 用于策略计算与 API 监听;内存用于存储端点状态与 eBPF Map
Cilium Operator Deployment(集群级) 处理集群范围任务:IPAM(IP 地址管理)、CiliumEndpoint 垃圾回收、网络策略状态汇总 CPU 与内存消耗相对稳定,与集群规模(节点数、Pod 数)线性相关
Cilium CNI 二进制插件(由 kubelet 调用) 在 Pod 创建时配置网络命名空间、分配 IP、调用 Agent 进行端点注册 瞬时调用,几乎不产生常驻资源消耗
CRD (Custom Resource Definitions) Kubernetes API 扩展 定义 CiliumNetworkPolicy、CiliumEndpoint、CiliumNode 等资源,作为控制面与数据面的配置契约 存储于 etcd,Agent 通过 Watch 机制监听变化,产生网络与内存开销
关键认知: Agent 是资源消耗的“主力”,因为它直接操作 eBPF 并维护节点级状态;Operator 是集群级协调者,其资源消耗通常比 Agent 低一个数量级。

2.2 数据面转发路径:eBPF / XDP / TC

Cilium 的数据面完全构建在 eBPF 之上,根据网络栈的挂载点不同,分为 XDP(eXpress Data Path)和 TC(Traffic Control)两种主要路径。理解数据包从网卡到 Pod 的穿越过程,是定位性能瓶颈与资源消耗热点的关键。

数据面路径概览: 物理网卡 → XDP(最早 hook)→ 内核协议栈(可选)→ TC Ingress(veth pair 主机端)→ eBPF 转发决策 → TC Egress(veth pair 容器端)→ 容器网络栈 → 应用 Socket。

下图展示了 Cilium 在节点内部的数据包转发流程,重点标注了 eBPF 程序的挂载位置:

Cilium 数据面转发路径与 eBPF 挂载点 Cilium 数据面转发路径与 eBPF 挂载点 物理网卡 (NIC) XDP eBPF 内核协议栈 TC Ingress (veth host) eBPF 转发决策 TC Egress (veth pod) 容器网络栈 说明:XDP 在驱动层处理,绕过协议栈;TC 在 veth pair 两端挂载,实现策略与转发。

2.3 资源消耗的宏观来源

从宏观视角看,Cilium 的资源消耗可以归纳为以下四个主要来源,它们相互关联,共同决定了节点的资源水位:

  1. eBPF 程序执行开销: 每个数据包经过 XDP/TC 挂载点时,都会触发 eBPF 程序的执行。程序复杂度(如策略查找、隧道封装、L7 过滤)直接影响每包 CPU 周期数。
  2. eBPF Map 操作与内存占用: Map 用于存储端点信息、策略规则、连接跟踪(Conntrack)表。Map 的大小与并发连接数、Pod 数量成正比,是内存消耗的主要来源。
  3. 控制面事件处理: Agent 监听 Kubernetes 资源变化(Pod 创建/删除、策略更新),每次事件都会触发 eBPF 程序的增量更新。频繁的事件(如大规模 Pod 滚动更新)会导致 CPU 突刺。
  4. 内核与用户态数据拷贝: 虽然 eBPF 减少了内核态与用户态的切换,但某些操作(如日志记录、Metrics 采集、FQDN 策略的 DNS 解析)仍涉及数据拷贝,产生额外的内存带宽与 CPU 开销。
常见误区: 很多用户只关注 eBPF 程序的“快”,而忽略了 Map 内存与事件处理带来的资源消耗。在 Pod 密度高(>100 Pod/节点)或连接数大(>10万并发)的场景下,Map 内存与事件处理往往成为瓶颈。

2.4 资源消耗的层次化分解

为了便于后续的资源画像,我们将资源消耗按层次进一步分解为 固定开销 与 动态开销:

层次 固定开销(与负载无关) 动态开销(与负载相关)
Agent 进程 基础 Go runtime、API Watch 连接、gRPC 服务 策略计算、eBPF Map 更新、事件处理
eBPF 程序 基础转发路径(如 NodePort、封装/解封装) 策略匹配(L3/L4/L7)、Conntrack 插入/查询
eBPF Map 全局 Map(如 Node Map、Policy Map) Per-Endpoint Map、Conntrack Map、Metrics Map
内核基础设施 veth pair 创建、网络命名空间 中断处理、内存拷贝、协议栈处理(非 XDP 路径)

这种分解方式帮助我们在优化时区分“必须承担的基础成本”与“可以通过配置或架构调整优化的弹性成本”。