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 是否均匀增长;若某条口长期为零,说明哈希未覆盖内层或流数量太少。
四、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 收敛需要优化。
把以上四点落到一张规划表里,可以作为实施前的检查依据:
| 规划项 | 示例参数 | 验证方法 | 失败判断 |
|---|---|---|---|
| VTEP 地址 | Loopback /32,如 10.255.0.1/32 | show ip route 对端 /32 | 无路由或仅单路径 |
| 路由协议 | eBGP,Leaf 独立 AS,Spine 同 AS | show bgp summary | 邻居非 Established |
| MTU | 物理 9000,内层 8950 | ping size 8972 df-bit | Frag needed |
| ECMP | maximum-paths 4,内层哈希 | 各上行口计数均匀增长 | 某口长期为零 |
| QoS | DSCP EF/AF41/CS1 分队列 | show queue 统计 | 高优先级队列丢包 |
| 故障域 | Spine 双上联,Leaf 独立 AS | 断一台 Spine 测收敛 | 收敛 > 1s |
Underlay 规划没有太多“炫技”空间,它的价值恰恰在于稳定和可预测。把路由、MTU、ECMP、QoS 四件事做扎实,VXLAN Overlay 才有可靠的底座;反之,任何一项偷工减料,都会在业务高峰期以丢包、抖动或隧道闪断的形式暴露出来。