一、背景与挑战
- 总结前两篇"基于Static Ingress Replication实现VxLAN"和"基于Multicast实现VxLAN"会发现VxLAN本身并未设计控制层面,而是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP的IP地址)的学习;
- 基于Static Ingress Replication实现的VxLAN和基于Multicast实现的VxLAN,都是采用数据驱动式的泛洪与学习,这种泛洪与学习方式导致数据中心网络中存在过多泛洪流量;
- 为解决数据驱动式的泛洪与学习带来的问题,VxLAN引入了EVPN(Ethernet Virtual Private Network)作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等特性,从而避免了不必要的数据流量泛洪;
- VxLAN引入了EVPN作为控制平面后,泛洪与学习由数据驱动式变为协议(MP-BGP)驱动式;
- VxLAN引入了EVPN作为控制平面后,使VTEP发现从数据平面转移到控制平面;
- EVPN作为VxLAN控制平面后,依靠MP-BGP协议也实现了新的功能特性,例如:VTEP间的认证、主机路由发布、支持分布式任播网关等;
- EVPN VxLAN数据层面的VxLAN报文封装格式不变,依旧为原始报文添加新VxLAN头、新UDP头、新IP头和新二层帧头。与TCP相比,采用UDP头可有效减少网络开销(尤其针对BUM流量)。另外与TCP(TCP通讯时不仅需要源IP、源端口、目的IP和目的端口,还需要序列号和应答号)这种面向连接的服务不同,UDP可更好的实现ECMP和LACP(将Hash出的随机源端口作为负载分担的依据)负载分担。
二、BGP EVPN介绍
2.1 EVPN演进史:
2.2 数据驱动式泛洪学习和EVPN控制层面对比:
- 邻居发现:传统的VxLAN因无控制层面,所以VxLAN隧道邻居的发现和维护借助数据泛洪来进行,而BGP EVPN通过BGP来自动发现和维护;
- 邻居认证:传统的VxLAN不具备认证功能,BGP EVPN可通过BGP协议本身的认证机制来实现;
- 主机路由学习:传统的VxLAN数据驱动式泛洪学习,BGP EVPN环境中本地主机通过数据驱动学习,远端主机通过MP-BGP路由协议进行通告;
- 主机路由分发布:传统的VxLAN不支持路由的发布,BGP EVPN通过路由导入实现VxLAN之间的互通(分为对称式和非对称式)。
2.3 VxLAN引入EVPN作为控制层面后带来的功能特性:
- 通过MP-BGP对主机的MAC/IP进行通告;
- 通过MP-BGP实现VTEP Peer的自动发现和认证;
- 支持分布式任播IP网关;
- 支持APR抑制;
- 具有头端自动发现的Ingress Replication;
- ……
2.4 VxLAN引入EVPN作为控制层面优势:
- 具有基于主机的转发的多租户架构解决方案;
- 可实现多厂商互操作的行业标准协议;
- 内嵌的多租户支持:
a, 利用MP-BGP提供具有L3 VPN特性的VxLAN; - 通过协议驱动的学习实现真正的可扩展性:
a, 通过EVPN MP-BGP实现主机MAC/IP地址发布; - 在主机移动或网络故障时快速收敛:
a, MP-BGP协议驱动的重新学习和融合;
b, 在主机移动时,新的VTEP将发送BGP更新以通告主机的新位置。 - 最佳流量转发路径,支持主机移动性:
a, 分布式任播网关可优化转发主机生成的流量;
b, 无需发卡(Hair-pinning)即可到达IP网关; - 支持ARP抑制:
a, 最小化Overlay网络中的ARP泛洪; - 具有动态学习远端VTEP列表的头端复制:
a, 头端复制可实现Underlay网络不用配置组播;
b, 动态学习的远程VTEP列表最大程度地减少了前端复制的配置开销。 - 可在Underlay网络配置组播实现BUM流量的转发;
- 通过MP-BGP身份验证的VTEP对等身份验证:
a, 增加了安全性,防止流氓VTEP或VTEP欺骗;
2.5 术语释义:
二层VNI:
VNl(VxLAN网络标识符)承载在跨VTEP(VxLAN隧道端点)桥接的VxLAN数据包中。此VNI是按每VLAN进行配置的。
三层VNI:
VNI承载在跨VTEP路由的VxLAN数据包中。此VNI链接到每个租户的VRF。
任播网关:
所有三层VTEP都为面向主机的SVI配置了相同的MAC地址和相同的IP地址。
VRF Over VLAN:
每个租户VRF都需要为VxLAN路由配置一个VLAN。
VxLAN二层网关:
VTEP能够在同一个VNI中交换VLAN -> VxLAN,VxLAN -> VLAN数据包。
VxLAN三层网关:
VTEP能够跨不同的VNI路由数据包。
2.6 EVPN控制层面处理:
- 参考MPLS VPN,BGP EVPN相当于在PE与PE之间建立了一个二层VPN;
- 因为使用MP-BGP协议承载EVPN,所以常见的属性都是必要的,包括RD、VPNv4前缀,RT和MP-iBGP。
2.7 MP-BGP for EVPN:
- BGP EVPN使用MP-BGP作为路由协议,通过使用VRF(RD、RT)区分不同租户;
- 使用新的address family(L2VPN EVPN)来发布EVPN路由;
- EVPN路由中包含了MAC和IP的可达性;
- 支持iBGP和eBGP。
2.8 新的NLRI(Network Layer Reachability Information)
- EVPN是一种用于二层网络互联的VPN技术。EVPN技术采用类似于BGP/MPLS IP VPN的机制,在BGP协议的基础上定义了一种新的NLRI(Network Layer Reachability Information,网络层可达信息)即EVPN NLRI,EVPN NLRI定义了几种新的BGP EVPN路由类型,用于处在二层网络的不同站点之间的MAC地址学习和发布。
- 因此EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。
1,EVPN Type 2:MAC/IP路由
通过Type-2路由将主机MAC/IP信息传递至远端VTEP。
MAC/IP路由报文格式如下图所示:
字段 | 说明 | 备注 |
---|---|---|
Route Distinguisher | 该字段为EVPN实例下设置的RD(Route Distinguisher)值。 | / |
Ethernet Segment Identifier | 该字段为当前设备与对端连接定义的唯一标识。 | / |
Ethernet Tag ID | 该字段为当前设备上实际配置的VLAN ID。 | / |
MAC Address Length | 该字段为此路由携带的主机MAC地址的长度。 | / |
MAC Address | 该字段为此路由携带的主机MAC地址。 | / |
IP Address Length | 该字段为此路由携带的主机IP地址的掩码长度。 | / |
IP Address | 该字段为此路由携带的主机IP地址。 | / |
MPLS Label1 | 该字段为此路由携带的2层VNI。 | / |
MPLS Label2 | 该字段为此路由携带的3层VNI。 | / |
该类型路由在VXLAN控制平面中的作用包括:
- 主机MAC地址通告
要实现同子网主机的二层互访,两端VTEP需要相互学习主机MAC。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机MAC。其中,MAC Address Length和MAC Address字段为主机MAC地址。 - 主机ARP通告
MAC/IP路由可以同时携带主机MAC地址+主机IP地址,因此该路由可以用来在VTEP之间传递主机ARP表项,实现主机ARP通告。其中,MAC Address和MAC Address Length字段为主机MAC地址,IP Address和IP Address Length字段为主机IP地址。此时的MAC/IP路由也称为ARP类型路由。主机ARP通告主要用于以下两种场景:
场景1:
ARP广播抑制。当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。
场景2:
分布式网关场景下的虚拟机迁移。当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息发送给虚拟机的原网关。原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。 - 主机IP路由通告
在分布式网关场景中,要实现跨子网主机的三层互访,两端VTEP(作为三层网关)需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IP路由。其中,IP Address Length和IP Address字段为主机IP路由的目的地址,同时MPLS Label2字段必须携带三层VNI。此时的MAC/IP路由也称为IRB(Integrated Routing and Bridge)类型路由。
说明:
ARP类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI;
IRB类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI+三层VNI。因此,IRB类型路由包含着ARP类型路由,不仅可以用于主机IP路由通告,也能用于主机ARP通告。
2,EVPN Type 3:Inclusive Multicast路由
该类型路由在VXLAN控制平面中主要用于VTEP的自动发现和VXLAN隧道的动态建立。作为BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。其中,Originating Router's IP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI。如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
此类型路由是由前缀和PMSI属性组成,报文格式如下图所示:
字段 | 说明 | 备注 |
---|---|---|
Route Distinguisher | 该字段为EVPN实例下设置的RD(Route Distinguisher)值。 | / |
Ethernet Tag ID | 该字段为当前设备上的VLAN ID,在此路由中为全0。 | / |
IP Address Length | 该字段为此路由携带的本端VTEP IP地址的掩码长度。 | / |
Originating Router's IP Address | 该字段为此路由携带的本端VTEP IP地址。 | / |
Flags | 该字段为标志位,标识当前隧道是否需要叶子节点信息,在VXLAN场景中,该字段没有实际意义。 | / |
Tunnel Type | 该字段为此路由携带的隧道类型。目前,在VXLAN场景中,支持的类型只有“6:Ingress Replication”,即头端复制,用于BUM报文转发。 | / |
MPLS Label | 该字段为此路由携带的二层VNI。 | / |
Tunnel Identifier | 该字段为此路由携带的隧道信息,目前,在VXLAN场景中,该字段也是本端VTEP IP地址。 | / |
3,EVPN Type 5:IP前缀路由
一般有两种场景会用到Type-5:
- Overlay网路与外部网络互通的场景,通过Type-5来传递IP前缀路由,当外部路由进入Border Leaf后,Border Leaf会将外部路由通过Type-5类路由同步到VxLAN网络中,从而实现VXLAN网络中的主机可以访问外部网络;
- 为VTEP下联了路由设备时,使用Type 5配合Type 2可减少BGP更新消息的发送。
IP前缀路由的报文格式如下图所示:
字段 | 说明 | 备注 |
---|---|---|
Route Distinguisher | 该字段为EVPN实例下设置的RD(Route Distinguisher)值。 | / |
Ethernet Segment Identifier | 该字段为当前设备与对端连接定义的唯一标识。 | / |
Ethernet Tag ID | 该字段为当前设备上实际配置的VLAN ID。 | / |
IP Prefix Length | 该字段为此路由携带的IP前缀掩码长度。 | / |
IP Prefix | 该字段为此路由携带的IP前缀。 | / |
GW IP Address | 该字段为默认网关地址,该字段在VXLAN场景中没有实际意义。 | / |
MPLS Label | 该字段为此路由携带的3层VNI。 | / |
2.9 BGP EVPN Unerlay网络的典型设计:
- 对于Underlay网络来说,互联的方法通常不是主要考虑的问题,但是推荐使用Fabric设计,同时VxLAN也适合在DCI环境中使用。
2.10 VxLAN VTEP回顾:
VTEP上存在两种接口:
- IP接口:用于封装和解封装VxLAN的报文,用于构建隧道(类似Cisco OTV技术中的Join Interface);
- Local接口:2层接口,用于将二层数据引入到VxLAN的环境中(类似Cisco OTV技术中的Internal Interface)。
2.11 EVPN VxLAN主机和子网路由发布:
- 一般在BGP EVPN环境中,主要由Leaf交换机来运行MP-BGP,类似于MPLS VPN的CE-PE-P结构,Leaf交换机作为PE设备存在,Spine交换机在一般情况下仅作VxLAN报文的转发(Spine交换机一般不做VxLAN的封装或解封装),类似于MPLS VPN中的P或BGP RR设备;
- 主机的路由发布与底层协议分离,在Leaf节点上使用MP-BGP分发内部主机/子网路由和外部可达性信息;
- 建议配置BGP RR(路由反射器),以提供大二层网络的可扩展性和降低部署、维护难度。
2.12 EVPN控制层面-可达性信息发布:
- 在VTEP上将MP-BGP与EVPN地址族配合使用,以发布内部主机MAC/IP地址,子网路由和外部可达性信息;
- MP-BGP的增强功能可承载多达数十万条路由,并缩短了收敛时间;
- 为保障业务连通性,往往需配置为Full Mesh的BGP,为减少配置和维护工作,建议使用BGP RR。
2.12.1 主机通告
- 当有一个新的主机接入VxLAN网络中,本地的VTEP会将这个主机的IP、MAC、VTEP、VNI形成BGP的Update消息,并发送给BGP RR(前提网络中存在BGP RR,没有RR就直接发送给BGP邻居);
- BGP RR将这个更新消息发送给所有的RR Client,RR Client将获得的MAC路由装载进MAC地址表,将获得的IP可达性信息装载进VRF路由表。
2.12.2 主机移动
- VTEP-1探测到Host1,这时为Host1通告一个序号为0的EVPN路由;
- Host1从VTEP-1移动至VTEP-3;
- VTEP-3探测到Host1,这时为Host1通告一个序号为1的EVPN路由;
- VTEP-1发现最新的路由并撤回自己的通告。
2.13 VxLAN集中式网关的问题:
- 如果两个主机,连接到同一个VTEP下不同的VxLAN L2网络中,当它们彼此想互访时,网络流量需先从VTEP流向L3 Gateway(Gateway可以是VTEP上的SVI,也可以是外部路由设备),例如在外部L3 Gateway完成3层转发,再回送到同一个VTEP;
- 这种来回绕的流量是一种发卡流量(Hair-pinning,流量转发路径形状像女生用的普通一字发卡)。按照这种方式,VxLAN间的互访已经实现了,但存在3个问题:
1.流量瓶颈,集中式的L3 Gateway的性能决定了三层流量的最大速率;
2.发卡流量,发卡流量会带来不必要的网络延迟和负载;
3.可能由于超占比的存在,不能保证全速的L3流量。
2.14 BGP EVPN VxLAN分布式任播网关:
- Distributed Anycast Gateway要求在所有的VTEP设备上为同一SVI配置相同的虚拟IP和MAC地址(此MAC地址可为所有的SVI使用),这样无论主机的数据包到达哪个VTEP设备都可以被网关正常的处理;
- Distributed Anycast Gateway一般用于对称式的BGP EVPN路由设计上;
- Distributed Anycast Gateway信息由BGP EVPN Type5通告。
2.14.1 不同的IRB(Integrated Routing and Bridging)模型:
- IRB是指在VTEP上同时实现L2桥接和L3路由功能;
- 类似传统的VLAN间路由,VxLAN间也可进行路由,IRB用于实现VxLAN间路由;
- IRB有两种模式,即对称式IRB和非对称式IRB;
- 非对称式IRB:数据包来回"路径"不对称;
- 对称式IRB:数据包来回"路径"对称;
- 厂商一般推荐使用对称式IRB。
2.14.2 非对称式IRB:
- 从以上两张图片可以看出,路由动作发生在源VTEP,之后再做VxLAN封装,然后走VxLAN的二层网络到达对端VTEP;
- 非对称式IRB如果在两个VxLAN之间进行路由,会在入站VTEP上进行路由,然后通过目的VNI传输到远端VTEP,在出站VTEP桥接。数据包返回流程同理(入站VTEP路由,出站VTEP桥接),所以被称为非对称式IRB。
- VNI中的所有VTEP都可以是本地主机的虚拟IP网关;
- 优点:因为在每台VTEP上都会具备源VNI和目的VNI,所以不会产生次优路径,优化的南北向流量转发,可无发卡的路由流量。
- 缺点:因为非对称IRB的转发特点(仅在源VTEP进行路由),为保证通信,每台VTEP都要配置维护所有的VNI,相应的每台VTEP所维护的MAC地址表和ARP表条目较多(包括那些没有本地主机的VNI也要配置);
- 对“非对称”的理解:
a, 上图中蓝线为Host-1去往Host-2的流量,绿线为Host-2返回Host-1的流量;
b, 可以看出非对称式IRB仅会在入站VTEP上进行路由,并且来回报文"路径"不对称。
2.14.3 对称式IRB:
- 对称式IRB:数据包在离开VTEP或进入VTEP时都进行路由,需要有一个特殊的L3 VNI承载本地VTEP到远端VTEP的流量;
- 数据流量从本地的L2 VNI进入到VRF L3 VNI,用L3 VNI封装VxLAN数据,到达对端后,流量从L3 VNI进入到L2 VNI;
- L2 VNI称作为Network VNI,L3 VNI称作为VRF VNI;
- 每个VRF都要配置一个L3 VNI。
- Host1发出数据包进入VTEP-1,VTEP-1上VNI A的网关将内层(原始)数据帧头中的目的MAC改为VTEP-4的MAC;
- VTEP-1将数据报文进行VxLAN封装,新IP头中源IP为VTEP-1的IP,目的IP为VTEP-4的IP,VxLAN报文中的VNI为L3 VNI;
- VTEP-4收到VxLAN报文后,进行解封装,修改报文的目的MAC后,送到Host2;
- 数据包返回同理;
- 可看出数据包来回"路径"一致。
对称式IRB优势:
- VTEP只需维护本地主机所需要的VNI,大大减少了无用的ARP和MAC地址表空间的占用;
- 增加了BGP EVPN实施的灵活性。
- 在多租户环境中,可以配置多个L3 VNI实现租户的流量传输;
- 使用L3-VNI识别租户VRF。
单租户涉及的逻辑组件
- 每个VLAN映射到一个二层VNI;
- 一个租户可以有多个VLAN,因此有多个二层VNI;
- 同一个二层VNI内的流量被桥接;
- 二层VNI之间的流量被路由;
- 每个租户有一个三 层VNI(VRF)用于路由;
- 上图中的VNl X'用于路由数据包。
2.14.4 vPC和BGP EVPN集成的环境:
- 在vPC和BGP EVPN集成的环境中,要求基本和普通的vPC+VxLAN一样,要求Loopbak接口要有一个相同的Secondary地址;
- vPC的peer gateway特性必须启用,以防止潜在有可能因为vPC防环机制造成的丢包,同时可以开启负载均衡的转发方式;
- 最佳实践是启用:peer-switch、peer gateway、ip arp sync和ipv6 nd sync。
- 因为vPC是二层技术,一般不会影响到三层,所以在三层这个层面上来说,两个vPC设备都是独立设备,需有自己独立的BGP进程。
2.14.5 非对称式IRB与对称式IRB对比:
- 对称式IRB可最佳利用VTEP上的ARP和MAC表;
- 对称式IRB可以更好地扩展终端主机;
- 根据VxLAN Overlay网络可以支持的VNI总数,对称式IRB可实现更好地扩展;
- 多家厂商已达成共识,对称式IRB将是最终方案;
- 思科也支持非对称式IRB以向前兼容;
- 思科推荐使用对称式IRB。
2.15 BGP EVPN VxLAN ARP抑制:
- ARP抑制功能默认关闭,需手工使能,在NVE接口下的member vni命令下配置;
- ARP抑制可有效减少由于主机学习导致的网络泛洪。
- Host1发送ARP请求,请求IP-2的MAC地址;
- VTEP-1拦截到Host1的ARP请求,VTEP-1开始检查ARP抑制缓存表,发现IP-2的ARP缓存条目;
- VTEP-1发送ARP回复包给Host1,ARP回复包中携带IP-2的MAC地址即MAC-2;
- Host1的ARP表学习到IP-2对应的MAC地址;
- 如果VTEP-1的ARP抑制缓存表中没有关于IP-2的条目,VTEP-1会对这个ARP请求进行泛洪。
Cisco Nexus 9000v配置ARP抑制注意:
- 需配置"hardware access-list tcam region arp-ether size double-wide"命令以保障正常的L3泛洪学习和ARP抑制,N9Kv使用此命令之前,必须先释放现有TCAM区域的部分占用空间;
- 通过"show hardware access-list tcam region"命令查看当前TCAM的分配情况;
- 举例:通过"hardware access-list tcam region racl 512"命令释放部分"racl"占用的TCAM空间;
- 举例:通过"hardware access-list tcam region arp-ether 256 double-wide"命令为"arp-ether"分配TCAM空间;
- 配置完毕后保存并重启设备生效。
2.16 BGP EVPN VxLAN中的BUM流量转发:
- Ingress Replication(头端复制):VTEP-1接收Overlay的BUM流量,将数据包封装为单播VxLAN数据包,向同一VxLAN VNI中的每个远端VTEP对等方发送一个副本。利用BGP协议实现Ingress Replication,泛洪时会有突发流量占用VTEP上行链路带宽;
- PIM:利用组播网络特性,只需一份副本,BUM流量就可以抵达所有VTEP Peers。在这种环境中,BUM流量实际是在Underlay的组播网络中传输。
三、Cisco Nexus 9000对VxLAN的支持:
- VxLAN封装和解封装由Broadcom Trident芯片处理;
- 桥接和网关可以在1/10/40/100G端口上配置;
- 封装发生在出站端口上;
- 解封装发生在入站端口上。
四、引用参考:
https://www.ciscolive.com
https://tools.ietf.org/html/rfc7432
https://www.sdnlab.com/23511.html
https://zhuanlan.zhihu.com/p/29519776
https://support.huawei.com/enterprise/zh/doc/EDOC1100075483/4b7cb278
https://nwktimes.blogspot.com/2018/04/vxlan-part-vi-vxlan-bgp-evpn-basic.html