使用 DCI 扩展 EVPN/VXLAN Fabric

本节介绍如何跨数据中心扩展 EVPN 和 VXLAN Fabric,并使用 EVPN 和 VXLAN 互连它们。由于 EVPN 和 VXLAN 利用控制平面 MAC 学习,因此您需要跨数据中心扩展信令(控制平面)域或互连多个控制平面域。

此环境演示了多种用例的最佳实践配置,包括使用 EVPN 信令以及 type-1、type-2 和 type-4 路由的二层扩展;使用 EVPN type-5 路由的三层扩展和路由;以及在 EVPN 和 VXLAN Fabric 中使用 EVPN 对称路由 进行 分布式路由 的 VLAN 间路由。示例还提供了用于 POD 间通信的路由泄漏场景。

配置示例使用 NVUE 对象模型NVUE CLI 设置具有 EVPN 多宿主的全活动服务器冗余环境,以在 ToR(架顶式)交换机上配置具有标准化二层冗余的 EVPN Fabric。本文档引用的所有 POD 都属于同一管理域或同一组织。本文档不讨论属于不同管理域的不同 Fabric 的互连。每个 POD 的设计与其他 POD 正交。

使用对称模型时,每个 VTEP 都会桥接和路由流量(入口和出口)。叶子入口主机端口桥接二层流量(通过 VLAN 和二层 VNI),然后将流量路由到称为三层 VNI 的特殊传输 VNI,所有路由的 VXLAN 流量都使用该 VNI。您必须将所有 VXLAN 流量路由到此三层 VNI,通过三层基础设施隧道传输流量,然后从三层 VNI 路由到目标 VTEP 上的相应 VLAN。然后,流量被桥接到目标主机。

在此模型中,叶子交换机只需要托管位于机架上的 VLAN(映射到 VNI)、三层 VNI 及其关联的 VLAN。这是因为入口叶子交换机不需要知道目标 VNI。

多租户需要每个 VRF 一个三层 VNI,并且您必须使用相同的三层 VNI 配置参与该 VRF 的所有交换机。出口叶子使用三层 VNI 来识别路由数据包的 VRF。有关更多示例,请参阅 Cumulus Linux 文档虚拟化环境中的 EVPN 流量流

EVPN 多宿主 (EVPN-MH) 是基于标准的 MLAG 替代方案,用于在架顶式级别提供二层服务器冗余。

BUM 流量

头端复制 (HER) 或入口复制使用包含组播以太网标签 (IMET) 路由(type-3)来自动发现远程 PE,以通过 VXLAN 设置 BUM 流量。这是默认配置选项。您还可以使用协议无关组播稀疏模式 (PIM-SM);但是,对于 DCI 环境,PIM 设计很复杂,需要额外的规划。请记住,大多数第三方 E-LINE、E-LAN、三层 VPN 和 VPWS 服务提供商不支持组播流量。对于通过暗光纤进行的数据中心互连,使用 PIM-SM 的组播底层路由提出了重大的组播网络设计挑战。NVIDIA 建议 DCI 使用 HER。

设计您的 EVPN 和 VXLAN Fabric

本节介绍设计 DCI EVPN 和 VXLAN Fabric 的基本注意事项。有关详细信息,请参阅Cumulus Linux VXLAN 和 EVPN 网络参考设计指南

规划自治系统编号方案

以下是跨 DCI EVPN Fabric 的自治系统 (AS) 编号方案注意事项列表

  • 为每个逻辑设备组分配唯一的标识符(AS 号)。
  • 为每个叶子节点分配其自己唯一的 AS 号。
  • 为每组 Spine 节点(连接到同一组叶子交换机或 POD 的所有 Spine 节点)分配一个公共 AS 号。网络中的每个 POD 必须为其 Spine 节点拥有一组唯一的 AS 号。
  • 为每组 Super Spine 节点(连接到同一组 Spine 节点)分配一个公共 AS 号。
  • 为属于同一 POD 的每个边界叶子对(或三元组)分配一个公共 AS 号。网络中的每个 POD 必须在其边界叶子上拥有一组唯一的 AS 号。

为每个边界叶子对分配一个公共 AS 号可以防止来自每个 POD 的本地通告前缀通过互连 POD 的边界叶子的冗余路径(通过 DCI)循环返回。POD 之间的一个 DCI 链路避免了这个问题,因为每个 POD 之间只有一条路径,没有任何冗余。但是,边界叶子上的公共 AS 号会阻止它们为具有 EVPN-MH 连接的主机提供服务,因为 EVPN-MH 要求参与的叶子节点具有不同的 AS 号。

Underlay 和 Overlay 注意事项

EVPN-VXLAN 是一种 Overlay 技术,可创建与拓扑无关的 Underlay Fabric。将 Underlay 与 Overlay 解耦可创建一个具有多租户、冗余和跨供应商无关生态系统的主机移动性的网络。但是,要建立从叶子节点到叶子节点的 VXLAN 隧道,网络必须使用 Underlay 路由协议分发隧道源地址(通常是环回地址)。这允许所有 VXLAN 对等方在其路由表中拥有每个隧道目标的主机路由作为 /32 前缀。这是 EVPN 和 VXLAN 的基本原则 — 每个叶子节点都需要其路由表中所有相应的 PE VXLAN 隧道目标地址的主机路由,以便它可以建立端到端 VXLAN 隧道。

以下命令显示了相应 PE 的 VXLAN 隧道目标地址

cumulus@leaf01:mgmt:~$ nv show nve vxlan source 
         operational  applied 
-------  -----------  ---------- 
address  10.10.10.1   10.10.10.1    

使用以下 NVUE 配置语句应用 VXLAN 隧道源地址配置

nv set nve vxlan source address 10.10.10.1 

对于 Underlay,任何可以快速收敛并提供多路径的知名 IGP 都足够了,例如 OSPF、IS-IS 和 BGP。OSPF 在企业环境中很流行,是一个安全的选择。但是,由于 OSPF 缺乏多协议支持,因此已被 Web 规模运营商拒绝。企业环境使用 OSPFv2,因为 IGP 是为 IPv4 设计的,而 OSPFv3 是为 IPv6 设计的。如果您的网络需要具有多协议支持的仅 OSPF Underlay,则必须运行两个单独的 OSPF 实例。

对于 IS-IS,许多运营商认为链路状态协议本质上不适合像 Clos 拓扑这样连接丰富的网络。链路状态协议将其各自区域中的链路状态更改传播到所有路由器,即使是那些与故障链路没有直接连接或依赖关系的路由器。

BGP 解决了这些限制,旨在扩展并在任何规模下提供无环拓扑。BGP 为互联网提供动力,工程师们都很熟悉,并且在整个供应商生态系统中具有标准化的实现。BGP 比链路状态路由协议的冗余信息少,并且原生支持多协议扩展(IPv4、IPv6、MPLS 和 EVPN)。但是,BGP 需要一些修改才能在数据中心中运行。

那么,在 Underlay 和 Overlay 环境中,您是使用 iBGP、eBGP 还是两者都使用?鉴于整个网络都在同一管理域下,并且属于同一实体或公司,iBGP 可能是显而易见的选择。然而,在现代数据中心,eBGP 是最常见的部署模型,因为它比 iBGP 更容易理解和部署。iBGP 路径选择算法以及管理转发哪些路由的规则可能会令人困惑。在某些情况下,例如当路由由两个不同的节点通告时,iBGP 多路径支持也存在限制。并且对于 iBGP 路由反射器的定位仍然没有共识。

Cumulus Linux 使用的路由协议栈是 FRR。使用 Cumulus Linux,FRR 使用数据中心配置文件配置,该配置将保持计时器设置为 9 秒,将 keepalive 计时器设置为 3 秒,以减少 BGP 默认收敛计时器。因此,数据中心环境中的 BGP 具有独特的行为,在数据中心中的 BGP 中进行了详细介绍。

本文档重点介绍 eBGP 作为 Underlay 和 Overlay 环境,并使用默认路由实例 (VRF) 进行 Underlay 通信和分发 VTEP 源。本文档对各个 EVPN 租户使用非默认(也非管理)VRF 实例。

规划路由目标和路由区分符

RD 和 RT 导入和导出语句没有 VNI 的显式配置时,Cumulus Linux 会使用 <vxlan-local-tunnelip>:<VNI> 格式自动派生 RD,并使用 <AS>:<VNI> 格式自动派生 RT。虽然您可以为每个 VNI 显式定义 RD,但您也可以通过不定义 RD 来自动派生它。

路由目标定义 BGP 学习或本地注入的前缀所属的 VPN。路由目标是您用来控制 VPN 前缀成员资格的机制。前缀可以是单个 VPN 或多个 VPN 的成员;因此,请勿使用自动生成的路由目标,而应使用自动导入和导出功能。本文档中的示例手动定义了路由目标,并导入和导出它们。当您为每个 DC 位置或 POD(下游 VNI)使用不同的 VNI 时,请确保导入语句涵盖相应的路由目标。

规划以太网段标识符

以太网段标识符 (ESI) 定义多宿主以太网段并使用 EVPN type-1 和 type-4 路由。为了跨数据中心扩展二层,这些路由也在 DCI 和本地 POD 的 ESI 上交换。它们在整个 EVPN Fabric 中运行,并且对于每个以太网段都必须是唯一的。Cumulus Linux 从以太网段系统 MAC 地址(6 字节)和本地鉴别器值(3 字节)派生一个 10 字节的 ESI 值(type 3)。

您还可以手动规划和配置整个 Fabric 的 ESI 编号方案。您必须拥有唯一的 ESI,您可以使用以下命令配置它

cumulus@switch:~$ nv set interface <interface> evpn multihoming segment identifier <ESI number> 

配置的 ESI 号码必须以 00 开头,这表示运营商是否管理和配置 ESI。您必须用冒号分隔数字,例如 00:00:00:00:00:00:aa:00:00:01

对于仅交换 type-5 前缀的三层扩展(VRF 切换),ESI 号码不太重要,因为 type-1 和 type-4 前缀不会传递到 DCI。在整个 Fabric 中保持一致且唯一的 ESI 是最佳设计实践。