EVPN/VXLAN Architecture Deep Dive
EVPN/VXLAN 架构深入探讨
BGP EVPN 路由类型、VTEP 发现、对称与非对称 IRB、ARP 抑制和多宿主 — 以及 Cisco NX-OS、Arista EOS 和 Junos CLI 示例。
1. 为什么选择VXLAN?
每个广播域 IEEE 802.1Q VLAN 的 ID 上限为 4,094 个,这对于多租户数据中心来说是一个硬性限制,在该数据中心中,数千个客户群必须在共享基础设施上共存。 VXLAN(虚拟可扩展局域网,RFC 7348)通过将以太网帧封装在 UDP/IP 内,使用 24 位 VNI(VXLAN 网络标识符)来支持多达 1670 万个逻辑段,从而解决了这个问题。
VXLAN 将虚拟第 2 层拓扑与物理第 3 层底层解耦,允许在 VXLAN 隧道端点 (VTEP) 之间进行标准 IP 路由(ECMP、OSPF、BGP),而无需扩展 VLAN。外部 UDP 标头使用目标端口4789(IANA 分配;早期部署使用 8472)。 IPv4 上的总封装开销约为 50 字节,IPv6 上的总封装开销约为 70 字节。
2. VTEP发现方法
VTEP 必须发现对等 VTEP 才能建立隧道并分发 BUM(广播、未知单播、组播)流量。实践中采用了三种机制:
| 方法 | 它是如何运作的 | 优点 | 缺点 |
|---|---|---|---|
| 组播 | 每个VNI映射到底层的一个PIM多播组; BUM 流量被淹没到该组 | 简单的;自动对等点发现 | 需要底层PIM组播;许多运营商禁用多播 |
| 入口复制 | 每个 VTEP 维护每个 VNI 的远程 VTEP 的显式单播列表; BUM 流量被复制到每个对等点 | 无需多播 | 头端对每个 BUM 数据包进行 O(N) 复制;静态对等列表需要手动维护 |
| 边界网关协议 | RT-3 IMET 路由通告 VTEP 成员资格; RT-2路由分配MAC+IP绑定;没有洪水和学习 | 控制平面MAC学习; ARP抑制;可扩展到数千个 VTEP;标准 | 所有 VTEP 或路由反射器上都需要 BGP 堆栈 |
现代新建数据中心仅使用 BGP EVPN。多播和入口复制是棕地环境中仍然存在的传统方法。
3. BGP EVPN路由类型
BGP EVPN(RFC 7432)使用AFI 25(L2VPN)/SAFI 70(EVPN)分发五种路由类型。 RT-5 单独定义于RFC 9136(2021 年 10 月)。
| RT | 姓名 | 目的 | NLRI 关键领域 |
|---|---|---|---|
| 1 | 以太网自动发现 | 链路故障时按 ES 和按 EVI 批量撤回;全主动多宿主负载平衡的别名 | RD、ESI、以太网标签 ID、MPLS 标签 |
| 2 | MAC/IP 广告 | 分发 MAC 地址(以及可选的绑定 IP)以启用 ARP 抑制并消除泛洪学习 | RD、ESI、VLAN 标签、MAC 地址、IP 地址(可选)、L2VNI + L3VNI 标签 |
| 3 | 包容性多播以太网标签 (IMET) | 根据 VNI 公布 VTEP 可达性;用于构建入口复制列表并触发 BUM 转发 | RD,以太网标签 ID,始发路由器的 IP(VTEP 地址); PMSI隧道属性携带VNI和隧道类型 |
| 4 | 以太网段路由 | 共享以太网段的 PE 之间的指定转发器 (DF) 选举;确保只有一个 PE 将 BUM 转发到 CE 段 | RD、ESI、始发路由器 IP |
| 5 | IP前缀路由(RFC 9136) | 将 IP 前缀通告到 EVPN 覆盖层以实现子网间路由;需要专用的 L3VNI(中转 VNI) | RD、以太网标签 ID、IP 前缀长度、IP 前缀、GW IP 地址、L3VNI 标签 |
4. 对称与非对称 IRB
集成路由和桥接 (IRB) 描述 VTEP 如何在覆盖子网之间路由流量。两个模型定义在RFC 9135:
非对称IRB:入口 VTEP 执行 L3 路由(TTL 递减、下一跳重写)到目的地封装和发送之前的L2VNI。出口 VTEP 仅桥接 - 它看到内部帧已寻址到最终 MAC。每个 VTEP 都必须对每个 VNI(子网)进行本地编程,即使是那些没有本地主机的 VNI(子网),这限制了规模。
对称IRB:入口 VTEP 从源 L2VNI 路由到共享L3VNI(过境 VNI,每个 VRF 一个)。出口 VTEP 从 L3VNI 路由到本地目标 L2VNI。两个端点都执行路由。每个VTEP只需要自己的本地L2VNI;单个L3VNI是通用的。这是大织物的推荐型号。
| 不对称IRB | 对称IRB | |
|---|---|---|
| 每个 VTEP 所需的 L2VNI | 结构中的所有 VNI | 仅本地连接的子网 |
| L3VNI(过境 VNI) | 不需要 | 必需 — 每个 VRF 一个 |
| 路由跳数 | 仅入口 VTEP | 入口和出口 VTEP |
| 规模 | 差(到处都是 VNI) | 良好(仅限本地子网) |
| RT-5 前缀 | 不支持 | 支持(使用L3VNI) |
5.ARP抑制
如果没有 EVPN,来自主机的 ARP 请求将广播到其 VNI 中,并洪泛到结构中的每个 VTEP。通过 BGP EVPN,一旦学习到主机,RT-2 路由就会将 MAC+IP 绑定分发到所有 VTEP。当主机针对远程 IP 进行 ARP 请求时,本地 VTEP 直接从其 BGP 填充表中进行应答 — 没有 ARP 数据包穿过 VXLAN 结构。这消除了已知主机的 BUM 泛洪,对于每个 VTEP 具有数千个虚拟机的结构尤其有影响。
ND(邻居发现)抑制对于 IPv6 的工作方式相同 — RT-2 路由在 NLRI 的 IP 字段中携带 IPv6 地址,并且 VTEP 在本地应答 NS 消息。
6. 多归属和ESI
以太网段标识符 (ESI) 是分配给将 CE 设备连接到多个 PE VTEP 的逻辑束的 10 字节标识符。存在两种转发模式:
- 单主动:一次转发一个PE。 DF 选择(使用 RT-4 路由)为每个以太网标签选择指定转发器。非 DF PE 阻止 BUM 转发到段中,但仍然可以接收单播。
- 全主动:所有 PE 同时转发,跨捆绑启用 ECMP(就像具有远程支路的端口通道)。 RT-1“别名”路由允许远程 VTEP 在所有连接的 PE 上对流向 ESI 的流量进行负载均衡。 MAC 移动性通过 RT-2 中的 MAC 移动性扩展社区进行处理。
7. 供应商 CLI 快速参考
| 任务 | 思科 NX-OS | 阿里斯塔EOS | 杜松子朱诺斯 |
|---|---|---|---|
| 显示EVPN路由 | show bgp l2vpn evpn |
show bgp evpn |
show route table bgp.evpn.0 |
| 显示 VTEP 对等点 | show nve peers |
show vxlan vtep |
show evpn instance |
| 显示覆盖 MAC | show mac address-table |
show vxlan address-table |
show evpn mac-ip-table |
| 显示 ARP 抑制缓存 | show ip arp suppression-cache detail |
show vxlan address-table detail |
show evpn mac-ip-table extensive |
| 显示 VNI 到 VRF 的映射 | show nve vni |
show vxlan vni |
show evpn instance extensive |
| 显示 ESI 多宿主 | show nve ethernet-segment |
show bgp evpn instance |
show evpn instance extensive |