Kubernetes多租户网络部署与eBPF性能优化 - 第2节

2.1 网络虚拟化核心诉求与封装演进

多租户网络拓扑面临的核心挑战是:隔离性、可扩展性与跨数据中心迁移。传统 VLAN 在 12-bit 标识符限制下最多支持 4096 个网络,无法满足公有云/大规模私有云的租户隔离需求。VXLAN 与 Geneve 通过 MAC-in-UDP 或 MAC-in-TCP-like 封装,将二层网络延伸至三层基础设施之上,同时将网络标识空间扩展至 16M+。

下表从封装层次、标识符宽度、头部开销、硬件卸载成熟度四个维度进行对比:

特性 VLAN (802.1Q) VXLAN Geneve
封装层 二层以太网帧插入 4 字节 Tag MAC-in-UDP (L2 over L3) MAC-in-UDP (可扩展 TLV)
网络标识 12-bit VLAN ID (0–4095) 24-bit VNI (约 16M) 24-bit VNI + 可选 TLV
头部开销 4 字节 (不含外层 MAC) 50 字节 (外层 IP+UDP+VXLAN) 50+ 字节 (可扩展选项)
硬件卸载 全硬件原生支持 主流智能网卡/交换机支持 较新,逐步落地
多租户隔离 有限 (4096 个 VLAN) 优秀 (16M VNI) 优秀 (16M VNI + 元数据)
跨子网/DC 需三层网关或 VXLAN 桥接 原生跨三层网络 原生跨三层网络
选型建议: 若仅需在单一物理数据中心内做简单租户隔离,VLAN 仍是最低延迟、零封装开销的方案。一旦涉及跨机架、跨集群或跨数据中心的大规模二层网络,VXLAN 是当前生产环境的事实标准。Geneve 更适合需要携带自定义元数据(如安全标签、服务链上下文)的 SDN 场景。

2.2 VLAN 原理与局限性

2.2.1 标准 802.1Q 帧结构

VLAN 通过在标准以太网帧中插入 4 字节的 802.1Q Tag 实现逻辑隔离。Tag 包含 2 字节的 TPID (0x8100) 和 2 字节的 TCI,其中 PCP (3-bit)、DEI (1-bit)、VID (12-bit)。

标准以太网帧:
+--------+--------+--------+--------+--------+--------+
|  DMAC  |  SMAC  |  Type  | Payload|  FCS   |
+--------+--------+--------+--------+--------+

802.1Q 帧:
+--------+--------+--------+--------+--------+--------+--------+
|  DMAC  |  SMAC  | TPID   | TCI    | Type   | Payload|  FCS   |
|        |        | 0x8100 |(PCP+DEI+VID)|   |        |        |
+--------+--------+--------+--------+--------+--------+--------+

2.2.2 关键局限

  • 标识空间不足: 12-bit VID 最大 4096,除去保留值,可用 VLAN 约 4000 个。在公有云场景,单个物理机可能承载数百个租户,4096 个 VLAN 远不够用。
  • 二层网络范围受限: VLAN 依赖 STP/RSTP/MSTP 防止环路,STP 收敛慢且浪费带宽;VLAN 无法跨越三层路由边界,跨数据中心必须依赖 VXLAN 或专线。
  • 配置静态化: 传统 VLAN 需要在交换机端口上静态配置 Access/Trunk,动态迁移虚拟机时 VLAN 配置无法自动跟随。
性能调优要点: 在纯 VLAN 环境中,避免使用超过 2000 个活跃 VLAN,防止交换机 MAC 表与 VLAN 表膨胀导致 TCAM 溢出。建议结合 PVLAN (Private VLAN) 减少广播域。

2.3 VXLAN 原理与数据平面

2.3.1 封装格式

VXLAN 将原始二层帧封装在 UDP 数据报中,外层使用物理网络的 IP 路由进行传输。VTEP (VXLAN Tunnel Endpoint) 负责封装/解封装。

VXLAN 封装帧结构:
+------------------+------------------+------------------+------------------+
| 外层 MAC 头部    | 外层 IP 头部     | 外层 UDP 头部    | VXLAN 头部       |
| (14/18 字节)     | (20 字节)        | (8 字节)         | (8 字节)         |
+------------------+------------------+------------------+------------------+
| 内部 MAC 头部    | 内部 Payload     | 内部 FCS         |
| (14 字节)        | (46-1500 字节)   | (4 字节)         |
+------------------+------------------+------------------+

VXLAN 头部细节:
+--------+--------+--------+--------+--------+--------+--------+--------+
|R|R|R|R|I|R|R|R|  Reserved   |          VNI (24-bit)          | Reserved|
+--------+--------+--------+--------+--------+--------+--------+--------+

2.3.2 数据平面转发流程

  1. 源 VM 发送 ARP/数据帧 到源 VTEP (通常集成在 vSwitch 中)。
  2. 源 VTEP 查表: 根据目的 MAC 查找 VNI 对应的远端 VTEP IP 列表。若未知,则通过 IP 多播或集中式控制器进行洪泛学习。
  3. 封装: 源 VTEP 添加 VXLAN 头部 (VNI=24-bit)、UDP 头部 (目的端口 4789)、外层 IP 头部 (源=本机 IP,目的=远端 VTEP IP)、外层 MAC 头部。
  4. 物理网络路由: 外层 IP 包经过交换机/路由器到达目的 VTEP。
  5. 解封装: 目的 VTEP 校验 UDP 和 VXLAN 头部,剥离外层头部,将内部二层帧交付给目的 VM。
MTU 风险: VXLAN 封装增加 50 字节头部,若物理网络 MTU 为 1500,则内部帧最大只能 1450 字节。必须将物理网络 MTU 提升至 1550 或启用 TCP MSS 钳制,否则会导致分片丢包。

2.4 Geneve 封装技术

2.4.1 设计目标

Geneve (Generic Network Virtualization Encapsulation) 由 IETF NVO3 工作组定义,旨在统一 VXLAN、NVGRE、STT 等封装格式,提供可扩展的元数据通道。核心改进:

  • 固定 24-bit VNI 与 VXLAN 兼容。
  • 可变长 TLV 选项:可携带安全上下文、服务链标识、时间戳等自定义元数据。
  • 协议类型字段:明确标识内部载荷是以太网帧还是其他协议。

2.4.2 封装格式对比

Geneve 头部结构:
+--------+--------+--------+--------+--------+--------+--------+--------+
|Ver|Opt Len|O|C|    Reserved   |          Protocol Type          |
+--------+--------+--------+--------+--------+--------+--------+--------+
|          VNI (24-bit)          |    Reserved   |
+--------+--------+--------+--------+--------+--------+--------+--------+
|          Variable Length Options (TLV) ...                         |
+--------------------------------------------------------------------+
特性 VXLAN Geneve
UDP 端口 4789 (固定) 6081 (固定)
选项支持 无 TLV 可变长 (最多 64 字节)
协议类型 隐含为以太网 显式字段 (支持非以太网载荷)
硬件卸载 成熟 较新,部分智能网卡支持
适用场景 通用二层 overlay SDN、服务链、安全策略随行
性能考量: Geneve 的可变选项会增加封装/解封装的计算开销。在纯转发场景,建议关闭不必要的 TLV 选项以保持线速。若使用 OVS + Geneve,需启用 TSO/GRO 卸载并检查网卡固件版本。

2.5 三种封装技术对比总结

以下 SVG 图从封装层次、标识空间、元数据扩展性三个维度展示 VLAN、VXLAN、Geneve 的定位差异:

VLAN / VXLAN / Geneve 封装技术对比 VLAN (802.1Q) 封装层:二层以太网 标识:12-bit VID 隔离数:≤ 4096 元数据:无 硬件卸载:原生 VXLAN 封装层:MAC-in-UDP 标识:24-bit VNI 隔离数:约 16M 元数据:无 硬件卸载:成熟 Geneve 封装层:MAC-in-UDP 标识:24-bit VNI 隔离数:约 16M 元数据:TLV 可变 硬件卸载:逐步 演进趋势: VLAN → VXLAN:突破 4096 隔离限制,支持跨三层网络。 VXLAN → Geneve:增加可编程元数据通道,适配 SDN/服务链场景。 生产选型:VXLAN 仍是当前最成熟、最广泛部署的 overlay 方案。

上图清晰展示了三种封装技术在隔离规模、元数据扩展性上的代际差异。VLAN 适用于小规模静态隔离;VXLAN 是当前大规模多租户网络的事实标准;Geneve 则为未来 SDN 与可编程网络提供了更灵活的元数据承载能力。

2.6 性能调优关键点

2.6.1 封装开销与 CPU 卸载

  • TSO/GRO/LRO: 启用网卡大段卸载与接收合并,减少 CPU 处理封装/解封装的中断次数。
  • 智能网卡卸载: 支持 VXLAN 或 Geneve 硬件封装的网卡 (如 Mellanox ConnectX-5/6、Intel E810) 可将封装处理卸载到硬件,降低 CPU 占用 30%-50%。
  • OVS 流表优化: 使用 megaflow 缓存减少用户态与内核态切换,配合 dpdk 加速数据面。

2.6.2 MTU 与分片控制

# 设置物理网络 MTU 为 1550 (以 Linux 为例)
ip link set eth0 mtu 1550

# 或启用 TCP MSS 钳制 (iptables)
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

2.6.3 控制平面收敛

  • 多播组管理: VXLAN 使用多播进行 BUM 洪泛时,需合理规划多播组范围,避免广播风暴。
  • 集中式控制器: 使用 EVPN (MP-BGP) 替代多播洪泛,实现 VTEP 自动发现与 MAC/VNI 路由同步,收敛时间从秒级降至毫秒级。
生产环境基线: 建议 VXLAN 场景下物理网络 MTU 统一设置为 1550,VTEP 之间启用 BFD 快速检测,控制平面采用 EVPN 替代多播。Geneve 场景需额外验证网卡固件是否支持 TLV 选项卸载。