3、Cilium 网络模型:Overlay(VXLAN/Geneve)与 Direct Routing 模式、隧道端点与路由表
Cilium 的数据平面支持两种核心网络转发模式:Overlay(覆盖网络)与 Direct Routing(直接路由)。理解这两种模式的工作原理、隧道封装机制以及节点路由表的变化,是掌握 Cilium 集群排障与流量路径分析的基础。
3.1 两种网络模式的核心差异
下表从封装开销、基础设施依赖、性能特征与适用场景四个维度对比 Overlay 与 Direct Routing 模式:
| 对比维度 | Overlay(VXLAN / Geneve) | Direct Routing |
|---|---|---|
| 封装方式 | 在原始数据包外添加 UDP 头部(VXLAN 固定 50 字节,Geneve 可变 50+ 字节) | 不封装,直接使用节点主网卡路由转发 |
| 基础设施依赖 | 仅需节点间三层可达(IP 网络连通即可) | 要求底层网络支持 Pod CIDR 路由(需配置 BGP 或静态路由) |
| 性能特征 | CPU 开销较高(封装/解封装),吞吐量略低 | 接近原生网络性能,无额外封装开销 |
| 适用场景 | 多云、混合云、网络设备不支持 Pod 路由的环境 | 同数据中心、网络团队可配合配置路由的场景 |
3.2 Overlay 模式:VXLAN 与 Geneve 隧道
在 Overlay 模式下,Cilium 在每个节点上创建一个隧道端点(Tunnel Endpoint,简称 VTEP),负责将 Pod 发出的数据包封装为 UDP 报文,通过节点主网卡发送到对端节点的 VTEP 解封装。
VXLAN 与 Geneve 的协议差异如下:
- VXLAN:固定头部 8 字节 + UDP 8 字节 + 外层 IP 20 字节 + 外层 MAC 14 字节,总开销约 50 字节。VNI(VXLAN Network Identifier)为 24 位,支持 1600 万个网络标识。
- Geneve:可变头部(基础 8 字节 + 可选 TLV),UDP 端口固定为 6081。支持更丰富的元数据传递(如安全策略标识、服务标识),更适合 SDN 场景。
以下 SVG 展示了 Overlay 模式下跨节点 Pod 通信的封装路径:
ip route show 确认目标 Pod CIDR 是否指向隧道接口,以及 bridge fdb show 查看 FDB 表中是否有对端节点的 MAC 地址。
3.3 Direct Routing 模式:无封装直通路径
Direct Routing 模式下,Cilium 不创建隧道接口,而是直接通过节点的物理网卡(eth0 或 bond0)转发 Pod 流量。每个节点需要将其他节点的 Pod CIDR 路由写入主路由表,下一跳指向对端节点的物理 IP。
这种模式要求底层网络基础设施(物理交换机或路由器)能够识别并转发 Pod CIDR 的路由条目。常见的实现方式包括:
- BGP 动态路由:Cilium 内置 BGP 控制器(Cilium BGP Control Plane),自动将 Pod CIDR 宣告给网络中的 BGP 对等体。
- 静态路由:在物理路由器或云平台路由表中手动添加每个节点的 Pod CIDR 路由。
- 云平台原生路由:在 AWS、GCP、Azure 等环境中,通过 Cilium 的云集成自动配置 VPC 路由表。
以下 SVG 展示了 Direct Routing 模式下跨节点 Pod 通信的路径:
aws-node 或 azure-ipam 组件自动管理路由表。
3.4 隧道端点与路由表深度解析
无论使用哪种模式,Cilium 都会在节点上维护一套精细的路由规则。理解这些规则是进行网络排障的前提。
3.4.1 Overlay 模式下的路由与 FDB
在 Overlay 模式下,Cilium 使用 策略路由(Policy Routing) 将 Pod 流量导入隧道接口。关键路由条目包括:
# 节点 A 上的路由表(简化)
10.0.2.0/24 via 192.168.2.20 dev vxlan0 # 跨节点 Pod CIDR → 隧道接口
10.0.1.0/24 dev lxc+ scope link # 本地 Pod → 直接交付
169.254.0.0/16 dev vxlan0 scope link # 隧道元数据通信
# FDB 表(转发数据库)
# 记录对端节点 MAC 与隧道 IP 的映射关系
00:11:22:33:44:55 dev vxlan0 dst 192.168.2.20 self permanent
当 Pod-A 向 Pod-B 发送数据包时,内核查找路由表发现目标属于 10.0.2.0/24 网段,下一跳为 192.168.2.20,出接口为 vxlan0。VXLAN 驱动查询 FDB 表,找到 192.168.2.20 对应的 MAC 地址,然后执行 VXLAN 封装。
3.4.2 Direct Routing 模式下的路由与 ARP
Direct Routing 模式的路由表更简洁,但依赖底层网络对 Pod CIDR 的认知:
# 节点 A 上的路由表(Direct Routing)
10.0.2.0/24 via 192.168.2.20 dev eth0 # 跨节点 Pod CIDR → 物理网卡
10.0.1.0/24 dev lxc+ scope link # 本地 Pod → 直接交付
default via 192.168.1.1 dev eth0 # 默认路由
此时,数据包直接通过 eth0 发出,目标 MAC 地址为下一跳 192.168.2.20 的 MAC(通过 ARP 获取)。物理交换机根据目标 IP(10.0.2.3)查找路由表,将数据包转发到节点 B。
3.5 模式选择决策树
在实际生产环境中,选择 Overlay 还是 Direct Routing 通常遵循以下决策逻辑:
- 底层网络是否支持 Pod CIDR 路由?
- 是 → 考虑 Direct Routing(性能优先)
- 否 → 必须使用 Overlay(兼容性优先)
- 是否需要跨集群或跨云通信?
- 是 → Overlay 更易实现(隧道封装天然隔离)
- 否 → 根据网络团队能力选择
- 性能敏感度如何?
- 高(如实时音视频、高频交易)→ Direct Routing
- 中低 → Overlay 可接受
- 运维团队是否熟悉 BGP?
- 是 → Direct Routing + Cilium BGP Control Plane
- 否 → Overlay 减少网络配置复杂度
3.6 排障命令速查表
| 排查目标 | 命令 | 预期输出 |
|---|---|---|
| 查看当前网络模式 | cilium status | grep "Tunnel" |
Tunnel: VXLAN 或 Tunnel: Disabled |
| 查看隧道接口 | ip link show vxlan0 |
接口状态为 UP,MTU 通常为 1450 |
| 查看 FDB 表 | bridge fdb show dev vxlan0 |
列出对端节点 IP 与 MAC 映射 |
| 查看路由表 | ip route show |
确认 Pod CIDR 路由指向正确接口 |
| 查看策略路由 | ip rule show |
确认 Cilium 添加的 100 优先级规则 |
| 测试隧道连通性 | cilium connectivity test |
所有测试用例通过 |