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 封装。下图展示典型跨节点数据路径:
2.4 转发平面关键决策点
数据路径中的每个决策点都可能成为回滚后的故障注入点:
- Pod → veth 对:CNI 插件创建 veth 对并配置 IP。回滚后若 CNI 插件版本不匹配,新 Pod 可能无法获取 IP 或路由。
- lxc 接口 → eBPF 程序:Cilium Agent 在 lxc 接口上附加 eBPF 程序。Agent 重启后需重新附加,若失败则流量黑洞。
- eBPF 路由查找 → 邻居表:直接路由模式依赖 eBPF 映射中的邻居信息。回滚期间邻居表可能过期,导致 ARP 解析失败。
- 物理网卡 → 对端节点:封装/解封装逻辑由 eBPF 程序处理。回滚后 eBPF 程序版本变化可能导致封装格式不兼容。
回滚验证重点: 在回滚后的生产窗口内,必须逐跳验证上述 4 个决策点的连通性。推荐使用
cilium connectivity test 配合 cilium monitor 抓取数据路径事件,确认 eBPF 程序正确附加且路由表完整。
2.5 组件交互时序与回滚影响
下图展示 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