2. Cilium 架构概览:数据面、控制面与 Kubernetes 集成
在容量规划视角下,理解 Cilium 的架构分层是优化网络接口配置的前提。Cilium 的核心设计遵循“控制面-数据面”分离原则,并通过 eBPF 技术将网络策略、负载均衡与可观测性下沉到内核层执行。本章从数据面、控制面及与 Kubernetes 的集成关系三个维度展开,为后续接口配置优化建立架构基础。
2.1 数据面:eBPF 驱动的内核转发引擎
Cilium 的数据面完全基于 eBPF(extended Berkeley Packet Filter)实现,不依赖传统的 iptables 或 IPVS。eBPF 程序被挂载到网络协议栈的关键钩子点(如 XDP、TC、套接字),在数据包到达用户态之前完成转发、过滤与封装决策。
容量规划要点: eBPF 数据面消除了 iptables 规则链的线性遍历开销,在 Pod 密度超过 500/节点时,CPU 消耗比传统方案降低 60%-80%。但 eBPF 程序本身的指令复杂度与 map 大小会直接影响吞吐,需在配置阶段评估。
数据面核心组件
| 组件 | 挂载点 | 功能 | 容量影响 |
|---|---|---|---|
| cilium_net | TC ingress/egress | Pod 间 L3/L4 策略执行 | 策略规则数 → map 内存占用 |
| cilium_host | TC ingress | 主机与 Pod 通信转发 | 主机路由表规模 |
| lxc_health | XDP / TC | 节点健康探测代理 | 探测频率 × 节点数 |
| cilium_vxlan (隧道模式) | TC egress | VXLAN 封装/解封装 | MTU 调整 + 隧道头部开销 |
配置建议: 在原生路由模式下,
cilium_host 接口的 MTU 应设置为“底层网络 MTU - 50(Geneve 头部)”;隧道模式下需额外减去 50 字节。错误 MTU 会导致分片重传,直接影响 PPS 上限。
2.2 控制面:Agent 与 Operator 的分工
Cilium 的控制面由两个主要组件构成:Cilium Agent(DaemonSet,每节点运行)和 Cilium Operator(Deployment,集群级运行)。它们共同负责策略下发、端点管理、身份分配与集群协调。
2.2.1 Cilium Agent — 节点级控制引擎
- 端点管理: 监听 Kubernetes API,维护本地 Pod 与主机的端点映射,写入 eBPF map。
- 策略编译: 将 CiliumNetworkPolicy / CiliumClusterwideNetworkPolicy 编译为 eBPF 指令集。
- 接口配置: 创建/删除
cilium_net、cilium_host、lxc_health等虚拟接口,设置 MTU、MAC、路由。 - 健康探测: 通过
cilium-health子进程定期检测节点与 Pod 连通性。
容量风险: Agent 的 eBPF map 大小由
--bpf-map-dynamic-size-ratio 控制。在 Pod 密度 > 1000/节点时,默认 ratio 可能导致 map 溢出,引发策略丢失。建议按“预期端点数 × 1.5”预留 map 容量。
2.2.2 Cilium Operator — 集群级协调器
| 职责 | 实现机制 | 容量规划关注点 |
|---|---|---|
| 身份(Identity)分配 | 基于安全标签的全局 ID 池 | ID 池大小(默认 65535),超限后策略降级 |
| 节点间隧道端点同步 | KVStore(etcd / CRD) | 节点数 > 500 时 etcd watch 压力 |
| CNI 插件协调 | 为每个新 Pod 分配 IP 并通知 Agent | IP 池耗尽速度与回收延迟 |
| ClusterMesh 跨集群 | 跨集群身份与服务同步 | 跨集群带宽与延迟对同步的影响 |
2.3 与 Kubernetes 的集成关系
Cilium 通过 CNI 接口与 kubelet 集成,并利用 CRD(Custom Resource Definition)扩展 Kubernetes 网络策略模型。集成链路直接影响接口配置的生效路径与性能开销。
集成流程(Pod 创建场景)
- kubelet 调用 Cilium CNI 二进制(
cilium-cni)。 - CNI 插件 通过 gRPC 请求本地 Agent 分配 IP 与端点 ID。
- Agent 创建 veth pair,一端放入 Pod 网络命名空间,另一端挂载到
cilium_net桥接。 - Agent 编译该 Pod 的安全策略,写入 eBPF map,设置 TC 钩子。
- Operator 更新全局身份映射,通知其他节点更新策略。
延迟敏感场景: 步骤 3-4 中,Agent 需要为每个新 Pod 编译策略。当集群每秒创建 Pod 数 > 50 时,建议启用
--bpf-policy-map-max=32768 并预编译常用策略模板,避免编译队列积压。
2.4 架构视角的容量规划要点
基于上述架构分析,在 Cilium 网络接口配置优化前,需建立以下容量基线:
- eBPF map 内存: 每个端点约占用 2-4 KB map 内存,1000 端点节点需预留 4-8 MB;策略规则数每增加 1000 条,额外消耗 1-2 MB。
- Agent CPU 预算: 策略编译为 CPU 密集型操作,建议为 Agent 预留 0.5-1 核(高密度节点 2 核)。
- Operator 协调延迟: 节点数 > 300 时,Operator 与 etcd 之间的 watch 延迟可能超过 5s,需调整
--operator-pprof与 etcd 心跳间隔。 - 接口 MTU 链: 从 Pod veth → cilium_net → 主机 eth0,每一跳 MTU 必须一致或递减,否则触发内核分片。
关键指标速查:
· 最大 Pod 密度/节点:建议 ≤ 750(原生路由)/ ≤ 500(隧道模式)
· 最大策略规则数/节点:≤ 5000(超出后建议启用
· 最小 MTU 配置:eth0 MTU - 50(隧道模式)/ eth0 MTU - 0(原生路由)
· 最大 Pod 密度/节点:建议 ≤ 750(原生路由)/ ≤ 500(隧道模式)
· 最大策略规则数/节点:≤ 5000(超出后建议启用
--bpf-policy-map-max 扩容)· 最小 MTU 配置:eth0 MTU - 50(隧道模式)/ eth0 MTU - 0(原生路由)