2. IDP 网络拓扑基础:分层模型、核心组件与数据路径

在生产窗口内执行 Cilium 回滚,前提是透彻理解 IDP(In-cluster Data Plane)网络拓扑。IDP 并非单一组件,而是由 分层模型、核心组件 和 数据路径 构成的完整转发体系。本节从这三个维度拆解 IDP 网络拓扑,为后续回滚验证建立结构化的知识基线。

2.1 IDP 网络分层模型

IDP 网络拓扑遵循四层抽象模型,每一层解决不同粒度的连通性问题:

层级 名称 职责范围 关键抽象
L4 服务层 ClusterIP、NodePort、LoadBalancer 服务抽象 Service / EndpointSlice
L3 路由层 Pod CIDR 间路由、跨节点封装/路由 路由表 / eBPF 映射
L2 安全层 网络策略执行、身份认证、加密 CiliumNetworkPolicy / Identity
L1 数据链路层 Pod 虚拟以太网对、CNI 接口管理 veth / netns / tc
回滚视角: 回滚操作主要影响 L3 路由层和 L4 服务层的转发规则。L1 数据链路层在回滚期间通常保持稳定,但需验证 veth 对与 netns 的绑定关系未因 Agent 重启而丢失。

2.2 核心组件:Agent、Operator、CNI

IDP 网络拓扑由三个核心组件协同驱动,每个组件在回滚过程中承担不同的风险与验证点:

  • Cilium Agent(DaemonSet):运行在每个节点上,负责本地 eBPF 程序加载、路由表更新、网络策略执行。回滚时 Agent 版本变更直接影响数据路径。
  • Cilium Operator(Deployment):集群级控制器,处理 IPAM、Endpoint 同步、Identity 分配。回滚期间 Operator 的版本滞后可能导致新 Pod 无法分配 IP。
  • CNI 插件(二进制):由 kubelet 在 Pod 创建时调用,负责将 Pod 接入网络。CNI 插件版本必须与 Agent 版本匹配,否则 Pod 创建失败。
版本依赖链: Agent ↔ CNI 插件(强耦合)→ Operator(弱耦合)。回滚时必须先回滚 Agent + CNI 插件,再回滚 Operator,否则会出现组件版本不兼容。

2.3 数据路径与转发平面

IDP 的数据路径分为 同节点转发 和 跨节点转发 两种模式。Cilium 默认使用 eBPF 直接路由(Direct Routing)或 VXLAN 封装。下图展示典型跨节点数据路径:

IDP 跨节点数据路径(eBPF 直接路由模式) 节点 A Pod-A (10.0.1.2) veth → lxc Cilium Agent eBPF 路由表 节点 B Pod-B (10.0.2.3) veth → lxc Cilium Agent eBPF 路由表 物理网络(underlay) 转发平面关键点 1. Pod 出站流量经 veth → lxc → eBPF 程序 2. eBPF 查路由表,直接封装目标 MAC 发送至对端节点

2.4 转发平面关键决策点

数据路径中的每个决策点都可能成为回滚后的故障注入点:

  1. Pod → veth 对:CNI 插件创建 veth 对并配置 IP。回滚后若 CNI 插件版本不匹配,新 Pod 可能无法获取 IP 或路由。
  2. lxc 接口 → eBPF 程序:Cilium Agent 在 lxc 接口上附加 eBPF 程序。Agent 重启后需重新附加,若失败则流量黑洞。
  3. eBPF 路由查找 → 邻居表:直接路由模式依赖 eBPF 映射中的邻居信息。回滚期间邻居表可能过期,导致 ARP 解析失败。
  4. 物理网卡 → 对端节点:封装/解封装逻辑由 eBPF 程序处理。回滚后 eBPF 程序版本变化可能导致封装格式不兼容。
回滚验证重点: 在回滚后的生产窗口内,必须逐跳验证上述 4 个决策点的连通性。推荐使用 cilium connectivity test 配合 cilium monitor 抓取数据路径事件,确认 eBPF 程序正确附加且路由表完整。

2.5 组件交互时序与回滚影响

下图展示 Pod 创建时的组件交互时序,以及回滚可能中断的环节:

Pod 创建时序与回滚风险点 kubelet CNI 插件 Cilium Agent Cilium Operator 1. 创建 Pod 2. 调用 CNI 3. 分配 IP 4. 分配 Identity 5. 加载 eBPF 6. 返回结果 回滚风险点 步骤 2(CNI 版本不匹配)→ 步骤 3(IPAM 失败)→ 步骤 5(eBPF 程序加载失败) 回滚后必须验证完整时序,任一环节中断则 Pod 网络不可用

2.6 回滚验证清单(基于本节知识)

  • 分层模型验证:确认 L1 数据链路层 veth 对状态正常;L3 路由层 eBPF 路由表条目完整;L4 服务层 EndpointSlice 与 Cilium 服务映射一致。
  • 组件版本验证:Agent 版本 == CNI 插件版本;Operator 版本 ≥ Agent 版本(允许高版本 Operator 兼容低版本 Agent)。
  • 数据路径验证:同节点 Pod 间 ping 测试;跨节点 Pod 间 ping 测试;Service ClusterIP 访问测试。
  • 转发平面决策点验证:使用 cilium bpf route list 查看路由表;使用 cilium endpoint list 确认每个 Pod 的 eBPF 程序已附加。
生产窗口验证命令示例:
# 验证 Agent 状态
kubectl -n kube-system exec ds/cilium -- cilium status

# 验证 CNI 插件版本
kubectl -n kube-system exec ds/cilium -- cilium version

# 验证跨节点路由
kubectl -n kube-system exec ds/cilium -- cilium bpf route list

# 验证服务转发
kubectl -n kube-system exec ds/cilium -- cilium service list