4、跨节点网络通信原理:Overlay网络(VXLAN/Geneve)、隧道封装与解封装、跨节点路由路径分析

在 Kubernetes 与多租户云原生环境中,跨节点 Pod 通信依赖 Overlay 网络 实现。Overlay 网络通过在物理网络(Underlay)之上构建虚拟二层域,使租户 Pod 能够无视底层拓扑进行通信。本章深入分析 VXLAN 与 Geneve 两种主流封装协议、隧道封装/解封装机制,以及跨节点路由的完整路径。

4.1 Overlay 网络核心概念

Overlay 网络的核心思想是将原始数据包(Inner Packet)封装在 UDP 隧道中,通过 Underlay 网络传输到目标节点后再解封装。关键组件包括:

  • VTEP(VXLAN Tunnel Endpoint):负责封装与解封装的端点,通常位于节点内核或 OVS 中。
  • VNI(VXLAN Network Identifier):标识租户或网络段,支持 1600 万+ 隔离域。
  • Underlay 网络:物理网络基础设施,提供三层可达性。
  • 隧道协议:VXLAN(标准)、Geneve(可扩展)、STT(较少用)。
关键指标对比: VXLAN 头部固定 8 字节,Geneve 头部可变(4-64 字节),支持 TLV 选项扩展,更适合多租户自定义元数据。

4.2 VXLAN 封装与解封装机制

VXLAN 将原始二层帧封装在 UDP 数据包中,封装格式如下:

+-------------------------------+
|  Outer MAC Header (14B)       |
+-------------------------------+
|  Outer IP Header (20B)        |
+-------------------------------+
|  Outer UDP Header (8B)        |
|  Dest Port: 4789              |
+-------------------------------+
|  VXLAN Header (8B)            |
|  Flags(8b) | Reserved(24b)    |
|  VNI(24b)  | Reserved(8b)     |
+-------------------------------+
|  Inner MAC Header (14B)       |
+-------------------------------+
|  Inner IP Header (20B)        |
+-------------------------------+
|  Payload (TCP/UDP/ICMP...)    |
+-------------------------------+
|  FCS (4B)                     |
+-------------------------------+

封装流程(发送端):

  1. 原始数据包从 Pod 到达 VTEP(如 Linux bridge 或 OVS)。
  2. VTEP 查询 FDB(转发数据库)或内核路由表,确定目标 VTEP IP。
  3. 添加 VXLAN 头部(VNI = 租户 ID)。
  4. 添加 UDP 头部(源端口由哈希计算,目的端口 4789)。
  5. 添加外层 IP 头部(源 = 本节点 IP,目的 = 目标节点 IP)。
  6. 添加外层 MAC 头部(下一跳 MAC)。
  7. 发送到 Underlay 网络。

解封装流程(接收端):

  1. 物理网卡接收外层数据包。
  2. 内核/OVS 识别 UDP 端口 4789,剥离外层 MAC/IP/UDP 头部。
  3. 检查 VXLAN 头部 VNI,匹配本地租户网络。
  4. 剥离 VXLAN 头部,还原原始二层帧。
  5. 将原始帧注入目标 Pod 所在 bridge/namespace。
性能要点: VXLAN 封装增加 50 字节头部开销(不含内层 FCS),MTU 需设置为 1450 或更小(取决于 Underlay 配置)。Geneve 头部可变,开销为 50-110 字节。

4.3 Geneve 协议与 VXLAN 对比

特性 VXLAN Geneve
标准 RFC 7348 RFC 8926
头部大小 固定 8 字节 可变 4-64 字节
VNI 长度 24 位 24 位
选项支持 无 TLV 选项(如元数据、安全标签)
UDP 端口 4789 6081
多租户扩展 仅 VNI VNI + 可选上下文
内核支持 Linux 3.7+ Linux 4.5+
典型场景 K8s 默认 CNI(Flannel/Calico) Cilium、OVN-Kubernetes
选型建议: 若仅需基本租户隔离,VXLAN 足够;若需传递 eBPF 元数据、安全策略上下文或自定义标签,优先选择 Geneve。Cilium 在 Geneve 模式下可携带 eBPF 元数据,实现更细粒度观测。

4.4 跨节点路由路径分析

跨节点通信路径分为 Underlay 路由 与 Overlay 路由 两个层次。以下为典型路径分解:

跨节点 Overlay 通信路径(VXLAN 模式) 源节点 (Node-A) Pod-A (10.1.1.2) ↓ veth → cbr0/bridge ↓ VTEP (192.168.1.10) 封装: VNI=100 Underlay 网络 外层 IP: 192.168.1.10 → 192.168.2.20 外层 MAC: Node-A MAC → Node-B MAC UDP: src=hash(流) dst=4789 物理交换机路由 TTL 递减,无隧道感知 目标节点 (Node-B) VTEP (192.168.2.20) 解封装: VNI=100 ↓ bridge → veth Pod-B (10.1.1.3) 路径关键点: 1. Pod-A 发出原始包(目标 10.1.1.3),通过路由表指向 VTEP。 2. VTEP 封装后,Underlay 仅感知外层 IP(192.168.x.x),对 VNI 无感知。 3. 目标 VTEP 解封装后,根据 VNI 将内层帧注入对应租户网络。 租户隔离保障: • 每个租户分配独立 VNI(如租户-A: VNI=100,租户-B: VNI=200)。 • VTEP 只解封装匹配本地 VNI 的隧道包,不匹配则丢弃。 • eBPF 程序可在 VTEP 入口/出口挂载,验证 VNI 与租户身份一致性。

4.5 路由查找与 FDB 转发

跨节点通信的路由决策分为两个阶段:

阶段 查找表 输入 输出
Overlay 路由 Pod 路由表 / 内核 FIB 目标 Pod IP(如 10.1.1.3) 目标 VTEP IP(如 192.168.2.20)
Underlay 路由 节点路由表 / 物理网络 目标 VTEP IP(192.168.2.20) 下一跳 MAC + 出接口
FDB 查询 VTEP 转发数据库 目标 MAC + VNI 目标 VTEP IP(多播/单播)
eBPF 观测点: 在 VTEP 的 tc ingress/egress 或 XDP 挂载点,可捕获封装前/解封装后的原始包,提取 VNI、源/目标 Pod IP、租户标签,用于丢包定位与隔离违规检测。

4.6 丢包防护关键路径

跨节点丢包可能发生在以下环节,需重点验证:

  • 封装阶段:源 VTEP 无法解析目标 VTEP IP(路由缺失)→ 丢包。
  • Underlay 传输:物理网络 MTU 小于封装后包长 → 分片或丢弃。
  • 解封装阶段:目标 VTEP 未配置对应 VNI → 丢弃。
  • 租户隔离违规:VNI 与租户不匹配 → eBPF 策略拒绝。
  • ARP/ND 失效:VTEP 未学习目标 MAC → 广播失败。
验证建议: 使用 tcpdump -i any port 4789 抓取封装后包,确认外层 IP 与 VNI 正确;使用 bpftrace 跟踪 vxlan_xmit 和 vxlan_rcv 内核函数,统计封装/解封装计数与错误。

4.7 多租户隔离下的隧道策略

在租户隔离蓝图中,每个租户的 VNI 必须唯一,且 VTEP 需实现 租户级 FDB 隔离:

# 示例:租户-A 使用 VNI 100,租户-B 使用 VNI 200
# 在 Node-A 上查看 FDB(使用 bridge fdb show)
00:11:22:33:44:55 dev vxlan0 dst 192.168.2.20 vni 100 self permanent
00:11:22:33:44:66 dev vxlan0 dst 192.168.3.30 vni 200 self permanent

# eBPF 程序验证 VNI 与租户身份
int vxlan_validate(struct __sk_buff *skb) {
    struct vxlanhdr *vh = (void *)(long)skb->data;
    if (vh->vni == 100 && skb->sec_label != TENANT_A_LABEL)
        return TC_ACT_SHOT;  // 隔离违规,丢弃
    return TC_ACT_OK;
}
风险提示: 若 VTEP 未严格隔离 FDB,租户-A 的 Pod 可能通过伪造 VNI 访问租户-B 的资源。eBPF 必须在 VTEP 入口强制校验 VNI + 源租户标签,防止隧道逃逸。

通过以上分析,Overlay 网络的跨节点通信本质是 “虚拟二层 + 物理三层” 的混合路径。VXLAN/Geneve 提供租户隔离基础,而 eBPF 在 VTEP 处的观测与策略执行,是保障隔离不泄露、丢包可追溯的关键技术手段。