2. Cilium 网络架构:数据路径、eBPF 与网络栈、Agent 与 Operator 角色
理解 Cilium 的网络架构是进行 MTU 调优的前提。Cilium 的核心能力来源于 eBPF 技术,其数据路径完全绕过了传统的 iptables 和内核网络栈的复杂路径,实现了高性能的网络转发与安全策略执行。本章将拆解 Cilium 的数据路径、eBPF 与网络栈的交互关系,以及 Cilium Agent 与 Operator 在集群中的角色分工。
2.1 Cilium 数据路径:从 Pod 到网络的完整旅程
Cilium 的数据路径是 eBPF 程序在内核中挂载的一系列钩子点。当数据包从一个 Pod 发出,到最终离开节点,会经历以下关键阶段:
关键路径节点:
- TC Ingress/Egress (Netfilter 钩子): 在网卡驱动层捕获数据包,执行 L2/L3 转发决策。
- XDP (eXpress Data Path): 在网卡驱动层之前执行,实现极速的 DDoS 防护和负载均衡。
- L3/L4 策略执行: 基于 Identity (安全标识) 而非 IP 地址,在 eBPF map 中查找策略。
- 隧道封装/解封装: 当使用 Overlay 模式 (如 VXLAN, Geneve) 时,eBPF 负责封装和解封装。
- 直接路由 (Native Routing): 当使用 Direct Routing 模式时,eBPF 直接修改路由表或通过 ARP 代理转发。
下图展示了 Cilium 数据路径中,一个 Pod 发出的数据包如何经过 eBPF 程序处理,最终到达对端 Pod 或外部网络:
MTU 调优关键点: 在隧道封装模式下,eBPF 会在原始数据包前增加额外的头部(如 VXLAN 50 字节、Geneve 50-100 字节)。如果物理网卡 MTU 未预留这些开销,会导致分片或丢包。Cilium 的
mtu 配置项正是用于告知 eBPF 程序预留正确的封装开销。
2.2 eBPF 与网络栈的交互:内核态与用户态的桥梁
Cilium 利用 eBPF 在内核中运行沙箱程序,这些程序通过 eBPF Maps 与用户态的 Cilium Agent 通信。eBPF 程序本身不负责复杂的业务逻辑,而是专注于高速数据包处理。
| 组件 | 运行位置 | 核心职责 | 与 MTU 的关系 |
|---|---|---|---|
| eBPF 程序 | 内核 (Kernel) | 数据包转发、策略执行、负载均衡、隧道封装 | 直接处理 MTU 计算和分片逻辑 |
| eBPF Maps | 内核 (Kernel) | 存储策略、端点信息、路由表、MTU 配置 | 存储 Cilium Agent 下发的 MTU 值 |
| Cilium Agent | 用户态 (Userspace) | 管理 eBPF 程序生命周期、下发配置、收集指标 | 计算并下发正确的 MTU 值到 eBPF Maps |
| Kubernetes API | 控制面 | 提供 Pod/Node/Service 信息 | Agent 通过 Watch 机制获取节点 MTU 信息 |
下图展示了 eBPF 程序与 Cilium Agent 之间的交互关系,以及 MTU 配置如何从 Agent 传递到内核 eBPF 程序:
2.3 Cilium Agent 与 Operator 角色分工
在 Cilium 架构中,Agent 和 Operator 是两个核心组件,它们分工明确,共同维护集群网络状态。
- Cilium Agent (DaemonSet): 运行在每个 Kubernetes 节点上,是数据面的实际管理者。它负责:
- 编译、加载和卸载 eBPF 程序。
- 管理本地端点 (Endpoint) 和身份标识 (Identity)。
- 与 kube-apiserver 交互,监听 Pod/Service/Node 变化。
- 计算并下发 MTU 配置到 eBPF Maps。
- 收集节点网络指标和 Hubble 可观测性数据。
- Cilium Operator (Deployment): 运行在控制面,负责集群级别的协调任务。它负责:
- 管理全局 Identity 分配。
- 处理 ClusterMesh 多集群服务发现。
- 管理 CiliumNetworkPolicy 的全局状态。
- 处理节点故障时的 IP 地址回收。
- 不直接参与数据路径,也不处理 MTU 计算。
| 维度 | Cilium Agent | Cilium Operator |
|---|---|---|
| 部署方式 | DaemonSet (每节点一个) | Deployment (通常 1-2 个副本) |
| 运行位置 | 数据面节点 | 控制面节点 |
| 核心功能 | eBPF 管理、数据路径、策略执行 | Identity 管理、多集群、全局协调 |
| MTU 相关职责 | 计算、下发、监控 MTU 配置 | 无直接关系 |
| 故障影响范围 | 仅影响所在节点网络 | 影响全局 Identity 分配 |
MTU 调优注意: 由于 Agent 是 MTU 配置的实际执行者,任何 MTU 修改都需要重启 Agent 或触发配置热加载。Operator 不参与此过程,因此 Operator 的故障不会直接影响 MTU 配置,但会影响新 Pod 的 Identity 分配,间接导致网络策略异常。