3. 底层网络规划

VXLAN 的 Overlay 再优雅,最终都要落在 Underlay 这张物理 IP 网络上。Underlay 的职责很纯粹:为 VTEP 之间提供高带宽、低时延、无环、可预测的 IP 可达性。它不感知租户,也不感知 VNI,只负责把封装后的 UDP 报文从一台 VTEP 送到另一台 VTEP。因此本章的规划逻辑是:先让路由稳定可达,再让转发路径足够宽、足够均衡,最后用 MTU、QoS 和故障域把风险关进笼子里。

一、Underlay IP 路由设计:用 /32 主机路由承载 VTEP

VXLAN 数据中心 Underlay 的主流做法是 Spines-Leafs 两层 CLOS,配合 eBGP 作为唯一路由协议。每台 Leaf 与每台 Spine 建立一条 eBGP 邻居,Leaf 把自己的 Loopback 地址(VTEP 源地址)以 /32 主机路由通告出去,Spine 只做转发、不引入额外策略。这样任意两台 VTEP 之间都有等价路径,且路由收敛只依赖直连链路状态,不依赖复杂的 IGP 度量计算。

关键设计点有三个。第一,VTEP 地址必须使用 Loopback 接口,保证任意物理链路故障时源地址不变,Overlay 隧道不会因接口 down 而重建。第二,AS 号规划要避免环路:常见做法是每台 Leaf 使用独立 AS,Spine 使用同一 AS,Leaf 收到带自己 AS 的路由即丢弃,天然防环。第三,路由通告要精确:Leaf 只通告自己的 VTEP /32 和业务网段,Spine 不向 Leaf 下发默认路由,避免流量绕行。

! Leaf-01 上的 eBGP 示例(示例参数,非实测)
router bgp 65001
  neighbor 10.0.1.1 remote-as 65100   ! Spine-01
  neighbor 10.0.1.3 remote-as 65100   ! Spine-02
  network 10.255.0.1/32               ! 本机 VTEP Loopback
  maximum-paths 4                     ! 允许 ECMP 多路径

判断路由是否健康,看三点:show ip route 10.255.0.2/32 是否出现两条等价下一跳;show bgp summary 邻居是否 Established;VTEP 之间 ping 是否稳定无丢包。若只有一条路径,说明 ECMP 未生效或 AS 路径不一致,需要检查 maximum-paths 与路由属性。

二、MTU 与分片:给封装留出 50 字节余量

VXLAN 封装会在原始以太帧外增加外层 IP(20B)、UDP(8B)、VXLAN(8B)以及内层以太头(14B),合计约 50 字节开销。若物理接口 MTU 为 1500,则内层可承载的净荷只有 1450 字节。一旦内层报文超过 1450,外层就会触发分片,而分片在数据中心里是性能杀手:它增加转发开销、破坏 ECMP 哈希一致性,还可能被安全策略丢弃。

正确做法是把物理接口和 Underlay 路径 MTU 统一提升到 9000(Jumbo Frame),并在 VTEP 上把内层接口 MTU 设为 8950,留出封装余量。同时必须保证整条路径——包括 Spine 上联口、Leaf 下联口、服务器网卡——全部支持 9000,否则会出现“大包不通、小包正常”的隐蔽故障。验证方法是带 DF 位 ping:

ping 10.255.0.2 size 8972 df-bit   ! 8972 + 28 = 9000,示例值

若返回 Frag needed,说明路径中某段 MTU 不足,需逐跳排查。生产环境建议在 Leaf 上开启 ip tcp adjust-mss 1400,让 TCP 主动协商较小 MSS,减少分片概率。

三、ECMP 负载均衡:让每条链路都跑满

CLOS 架构的价值在于多路径。Leaf 到 Spine 通常有 2~4 条等价路径,Spine 到 Leaf 同理。ECMP 的哈希算法默认基于五元组(源 IP、目的 IP、源端口、目的端口、协议),但 VXLAN 封装后,外层五元组在同一个 VTEP 对之间是固定的,导致同一对 VTEP 的流量只能走一条链路,其余链路闲置。

解决办法是启用基于内层报文的哈希:在 Leaf 上配置 hash algorithm inner-header 或等价命令,让设备解析 VXLAN 内层五元组参与哈希。这样不同租户、不同 TCP 流的流量会被分散到不同 Spine,链路利用率显著提升。判断是否生效,可在两台 VTEP 之间打流,观察各条上行口的 show interface counters 是否均匀增长;若某条口长期为零,说明哈希未覆盖内层或流数量太少。

Underlay 规划四要素关系图 Spine-01 AS 65100 · 9000 MTU Spine-02 AS 65100 · 9000 MTU Leaf-01 VTEP 10.255.0.1/32 Leaf-02 VTEP 10.255.0.2/32 ECMP 等价多路径 基于内层五元组哈希 VXLAN 隧道(UDP 4789) 外层 50B 开销 → 内层 MTU 8950 QoS 与故障域隔离 存储/计算/管理流量分队列 · DSCP 标记 · 单 Leaf 故障不影响其他 Leaf 的 VTEP 可达性 故障域边界:Spine 层冗余、Leaf 独立 AS、VTEP Loopback 不变 MTU 检查 DF 位 ping 9000 禁止分片 路由健康 /32 主机路由 BGP Established

四、QoS 与故障域隔离:把风险限制在最小范围

Underlay 上同时跑着存储、计算、管理三类流量,VXLAN 封装后它们共享同一张物理网。若不区分优先级,存储突发流量会挤占计算流量的队列,导致业务抖动。建议在 Leaf 上做三件事:一是用 DSCP 标记区分流量,存储 EF(46)、计算 AF41(34)、管理 CS1(8);二是每类流量映射到独立队列,存储队列保证带宽、计算队列保证低时延;三是在 Spine 上启用 WRED,避免队列满时全局丢包。

故障域隔离的核心是“单点故障不扩散”。Spine 层必须双上联,Leaf 层每台独立 AS,VTEP 使用 Loopback 地址。这样一台 Leaf 故障时,只有它下面的服务器受影响,其他 Leaf 的 VTEP 路由仍然通过另一台 Spine 可达。判断隔离是否有效,可以模拟单台 Spine 断电,观察其他 Leaf 之间的 VTEP 隧道是否在收敛时间内恢复;若恢复时间超过 1 秒,说明 BGP 定时器或 ECMP 收敛需要优化。

规划顺序建议:先定 MTU(9000),再定路由(eBGP + /32),然后开 ECMP 内层哈希,最后配 QoS 和故障域。顺序颠倒会导致反复返工。
常见误区:只把 Leaf 上联口改成 9000,服务器网卡仍是 1500,结果大包在服务器侧就被分片,VXLAN 隧道内出现“小包通、大包丢”的隐蔽故障。务必端到端核对 MTU。

把以上四点落到一张规划表里,可以作为实施前的检查依据:

规划项示例参数验证方法失败判断
VTEP 地址Loopback /32,如 10.255.0.1/32show ip route 对端 /32无路由或仅单路径
路由协议eBGP,Leaf 独立 AS,Spine 同 ASshow bgp summary邻居非 Established
MTU物理 9000,内层 8950ping size 8972 df-bitFrag needed
ECMPmaximum-paths 4,内层哈希各上行口计数均匀增长某口长期为零
QoSDSCP EF/AF41/CS1 分队列show queue 统计高优先级队列丢包
故障域Spine 双上联,Leaf 独立 AS断一台 Spine 测收敛收敛 > 1s

Underlay 规划没有太多“炫技”空间,它的价值恰恰在于稳定和可预测。把路由、MTU、ECMP、QoS 四件事做扎实,VXLAN Overlay 才有可靠的底座;反之,任何一项偷工减料,都会在业务高峰期以丢包、抖动或隧道闪断的形式暴露出来。