前言
在当前云计算高速发展的背景下,数据中心网络面临着诸多挑战。
云计算具有资源池化,按需供给等特点,正是因为云计算的出现使得IT资源具备了可运营的条件。
数据中心网络则是云计算生态中非常重要的一环,在云计算的模式下网络承担了基础底座的角色,信息的处理、存储、传递等功能均离不开网络承载。数据中心网络也不得不面临如下挑战:
扩展性至关重要,尤其是在云数据中心。一个数据中心要能够容纳成千上万的租户和数千个租户网络。由于12-bit VLAN字段的限制最大只能支持4K网络,传统VLAN组网不足以支持大型多租户数据中心。弹性
云场景下,数据中心网络必须能够适应租户不断变化的需求和要求。如何快速调整网络资源,以响应应用层的负载变化。高可用性
数据中心网络必须能保证全年7x24小时的连续运转,并能够应对潜在的故障场景和灾难场景。开放性
防止单一的品牌锁定,越来越多的大型数据中心网络都在朝着白盒方向演进,品牌厂商也在要求不断开放基于数据中心部署的标准。安全性
特别是在云数据中心,多租户的网络隔离,公有云和私有云之间的安全策略,未授权设备的接入访问等。敏捷性
应用层的部署请求完成所需的时间是考验数据中心网络敏捷性的重要标准。低成本
数据中心的总体成本包括资本支出和运营支出。虽然资本支出部分随时间摊销,但运营支出部分是持续性支出,因此降低数据中心的运营成本至关重要。一体化解决方案
不同于传统数据中心逐点部署的方式,现今云数据中心需要一套整体的解决方案,网络与计算、存储等资源紧密结合,联动SDN控制器完成复杂场景的自动化任务。
数据中心Fabric演进
STP
在数据中心初期,大多数是以生成树协议(STP)为基础构建的网络。使用STP一定程度上解决了二层网络的环路问题,但是仍有一些问题是STP无能为力的,例如:链路利用、收敛速度、广播风暴、多路径(ECMP),双归属(dual- homing)以及网络规模的限制等等问题。
M-LAG
M-LAG是一种跨机框链路聚合技术,可将其理解为一种横向虚拟化技术,通过配置使一对交换机在逻辑上被视为一个整体,从而达到消除环路,提高冗余能力, 在一定程度上解决了STP的一些问题。不过这种技术无疑是增加了网络的复杂程度,有实际运维经验的网络工程师肯定深有体会。
Clos
CLOS 网络的核心思想是:用多个小规模、低成本的单元构建复杂,大规模的网络。简单的 CLOS 网络是一个三级互连架构,包含了输入级,中间级,输出级。它是由贝尔实验室的研究员Charles Clos提出。
Spine-Leaf的网络架构正是根据这个思想产生。将上图的网络对折,就有了我们现在数据中心网络的样子。
Spine-Leaf网路由Underlay和Overlay组成。简单来说,Underlay采用三层IP互联,Overlay是在三层IP互联的基础上建立二层互通。这使得整个数据中心网路就像由若干交换机组成的一台大交换机。Underlay网络就像是这个大交换机的交换背板,而Overlay网络则是基于每个租户的相互隔离的虚拟网络。
这样的网络架构根本上避免了二层环路产生和设备单点故障,也提供了链路的冗余能力,网络的灵活性、扩展性也大大提升。
那么下面让我们逐步了解一下以Spine-Leaf为架构的数据中心网络。
VXLAN介绍
首先必须提到VXLAN,VXLAN是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,采用MAC-in-UDP的报文封装模式。原始报文在VXLAN接入点加上VXLAN帧头后再被封装在UDP报头中,并使用Underlay网络的IP/MAC地址作为外层头进行封装,Underlay网络只需要按照普通的二三层转发流程进行转发即可。
报文格式如下
相关概念
VXLAN网络架构模型
VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,进行VXLAN报文的封装、解封装等处理。VTEP既可以部署在网络设备上(TOR交换机),也可以部署在vSwitch上(服务器上的虚拟交换机)。VNI(VXLAN Network Identifier,VXLAN 网络标识符)
VNI是一种类似于VLAN ID的网络标识,用来标识VXLAN二层网络。一个VNI代表一个VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。VNI有24比特,可以支持多达16M的VXLAN段。L3VNI
在分布式网关之间通过VXLAN隧道转发流量时,属于同一租户(VRF)的流量通过L3VNI来标识。L3VNI唯一关联一个VPN实例,通过VPN实例确保不同租户之间的业务隔离。VXLAN隧道
两个VTEP之间建立的逻辑隧道,用于传输VXLAN报文。业务报文在进入VXLAN隧道式进行VXLAN、UDP、IP头封装,然后通过三层转发透明地将报文转发给远端VTEP,远端VTEP对报文进行解封装处理。
VXLAN封装转发流程
同子网单播封装转发流程 在进行ARP报文的交互后(ARP Request转发流程后面再讨论),VM 1上已经存在VM 3的ARP表项,VM 3上也有VM 1的ARP表项。Leaf A收到VM 1发来的单播报文,发现其目的MAC为MAC 3,在VXLAN 10中查找到后,进行VXLAN封装后通过Tunnel 1发送出去。Leaf B收到Leaf A发来的报文,解封装后在VXLAN 10中找到MAC 3表项,将其在对应的本地端口和VLAN中发出去。VM 3收到报文后,往VM 1发送单播报文的流程相同。 跨子网单播封装转发流程以集中式网关为例,网关设在Spine C上,VM1和VM4是不同子网。
VM 1先将报文发送给网关。报文的源MAC是VM 1的MAC,目的MAC是网关VRF10的MAC,源IP是VM 1的IP,目的IP是VM 4的IP。Leaf A收到VM 1发来的报文,识别此报文属于VXLAN 10,查找目的MAC G10的表项,就报文进行VXLAN封装后从Tunnel 2发送出去。其中,VXLAN头中的VNI为10;外层源IP地址为Leaf A的IP,外层目的IP地址为Spine C的IP;外层源MAC地址为Leaf A的MAC,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。Spine C收到Leaf A发来的报文,发现外层目的IP是自己,于是对报文进行解封装。解完封装后,Spine C发现原始二层报文的目的MAC为本机VRF10的MAC,目的IP是IP4,于是根据路由表查找IP 4的下一跳。发现一下跳为Leaf B,出接口为VRF20。再查询ARP表项,并将原始二层报文的源MAC修改为VRF20的MAC,将目的MAC修改为VM 4的MAC。报文到达VRF20接口时,识别到需要进入VXLAN 20隧道,所以根据MAC表对报文进行封装。这里封装的VXLAN头中的VNI为20,外层源IP地址为Spine C的IP地址,外层目的IP地址为Leaf B的IP地址;外层源MAC地址为Spine C的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。Leaf B收到Spine C发来的报文后,解封装,得到原始二层报文。在VXLAN 20内找到目的MAC为MAC 4的表项,并将报文从对应的接口和VLAN中发送出去。最终VM 4收到了来自VM 1的报文。VM 4发送给VM 1的过程与此类似。
EVPN介绍
上面提到的VXLAN是定义了数据包是如何在网络中封装,转发,解封装的,属于数据的转发层面。
这部分我们重点介绍EVPN,EVPN属于控制层面,定义了VTEP如何自动发现,MAC地址、IP地址这些指导转发的信息是如何在网络中学习和传递的。
相关概念:
ES(Ethernet Segment)CE接入到PE的以太链路集合就是一个ESESI(Ethernet Segment Identifier)PE与某一CE的连接定义的唯一标识。EVI(EVPN Instance) 表示EVPN实例,EVPN是虚拟化私网,在一台PE设备上存在多个EVPN实例。类似于VPLS的VSI,用来标识一个VPN客户。EVPN路由
TYPE1 Ethernet Auto-discovery Route
分两种:
Ethernet Auto-Discovery Per ES路由主要用于ESI多活场景中的快速收敛和水平分割,
Ethernet Auto-Discovery Per EVI路由主要用于ESI多活场景中的别名
Ethernet Auto-Discovery Per ES路由
Route Distinguisher:由源VTEP IP地址与0组合而成,例如1.1.1.1:0。
Ethernet Segment Identifier:PE与CE连接的唯一标识。在VM多归场景中,PEs通过这一字段获知哪些PE连接了同一个CE。
Ethernet Tag ID:该字段为全F。
MPLS Label:该字段为全0。
Ethernet Auto-Discovery Per EVI路由
Route Distinguisher:EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Segment Identifier:同上。
Ethernet Tag ID:该字段用于标识一个ES下的不同的子广播域,全0标识该EVI只有一个广播域
MPLS Label:该字段为绑定EVPN实例的BD所关联的VNI。
TYPE2 MAC/IP Advertisement Route
用于通告主机MAC地址、主机ARP和主机路由信息。
Route Distinguisher:为EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Segment Identifier:为当前PE与CE连接定义的唯一标识。
Ethernet Tag ID:为当前设备上实际配置的VLAN ID或VNI ID。
MAC Address Length:为此路由携带的主机MAC地址的长度。
MAC Address:为此路由携带的主机MAC地址。
IP Address Length:为此路由携带的主机IP地址的掩码长度。
IP Address:为此路由携带的主机IP地址。
MPLS Label1:为此路由携带的二层VNI。
MPLS Label2:为此路由携带的三层VNI。
TYPE3 Inclusive Multicast Ethernet Tag Route
用于VTEP自动发现和VXLAN隧道建立。
Type3携带的PMSI Tunnel 属性
Route Distinguisher:同上。
Ethernet Tag ID:在此路由中为全0。
IP Address Length:该字段为此路由携带的本端VTEP IP地址的掩码长度。
Originating Router’s IP Address:该字段为此路由携带的本端VTEP IP地址。
Flags:标识当前隧道是否需要Leaf节点信息。在VXLAN场景中,该字段没有实际意义。
Tunnel Type:目前,在VXLAN场景中,支持的类型只有“6:Ingress Replication”,即头端复制,用于BUM报文转发。
MPLS Label:该字段为此路由携带的二层VNI。
Tunnel Identifier:目前,在VXLAN场景中,该字段也是本端VTEP IP地址。
TYPE4 Inclusive Multicast Ethernet Tag Route
用于通告ES及其连接的VTEP信息,以便发现连接同一ES的VTEP冗余组其他成员,以及在冗余组之间选举指定转发器DF等。
Route Distinguisher:同上。
Ethernet Segment Identifier (ESI):同上。
IP Address Length:在VXLAN场景中为VTEP地址的长度。
Originating Router’s IP Address:在VXLAN场景中为VTEP地址。
TYPE5 IP Prefix Route
用于通告引入的外部路由信息。
Route Distinguisher:该字段为VPN实例下设置的RD(Route Distinguisher)值。
Ethernet Segment Identifier:同上。
Ethernet Tag ID:该字段取值为全0。
IP Prefix Length:该字段为此路由携带的IP前缀掩码长度。
IP Prefix:该字段为此路由携带的IP前缀。
GW IP Address:该字段为默认网关地址。
MPLS Label:该字段为此路由携带的三层VNI。
补充
EVPN路由的使用,可以参考我以前的博文:
TYPE1 per ESI
TYPE1 per EVI
TYPE2
TYPE3
TYPE4
Underlay网络
由于VXLAN是MAC-in-IP/UDP,IP承载网络需要以最佳方式承载来自VXLAN隧道端点(VTEP)的IP流量。
以下几点我们在部署Underlay网络时需要重点考虑:
Underlay网络架构模型
经典的部署方案,IP Fabric是由Spine-Leaf两层组成,根据网络规模的大小我们可以横向扩展Spine和Leaf交换机的数量。这样的网络结构任意两台终端互相通信最多经过3个节点,因此我们称之为3-stage IP fabric。
随着网络规模的扩大,我们可以将一组Spine-Leaf看做一组Pod,在原有的Spine层上增加一层Fabric(Spuer-Spine),用来提供Pod间互通。这样两台终端间互通最多需要经过5个节点,称之为five-stage IP fabric。
Underlay路由部署
我们说Spine-Leaf采用了三层IP互联,那么路由协议将如何选择?
目前三种主流的开放标准协议:OSPF、ISIS和BGP,本质上都是可以完成通告路由前缀的功能,但是每种协议的组网规模和实现功能上有所不同。
OSPF和ISIS都是使用洪泛技术来发送更新报文和其它路由信息,创建区域可以限制洪泛的范围。
BGP通过按组创建,支持大量前缀和对等体,BGP也从多方面保证了网络的灵活性、稳定性、可靠性以及高效性等。所以目前大多数大型数据中心都是采用部署BGP的方式。另外由于BGP的选路方式,在Underlay网络支持ECMP需要额外在交换机上开启”multipath“特性。
IBGP
我们需要在IBGP对等体之间建立全连接(Full-mesh)关系来保证IBGP对等体之间的连通
性,可以通过RR方式部署。
EBGP
在EBGP中,Spine和Leaf中的每个交换机都有自己的AS。
下一跳属性是必须要考虑的,因为在Spine-Leaf的拓扑结构中,VTEP通常是在Leaf交换机,Leaf交换机通告本地主机信息是通过Spine交换机传递到远端Leaf交换机,所以不能改变下一跳属性从而允许VXLAN隧道能在Leaf交换机之间建立。
以上只是简单举例,实际环境中AS的划分可能还有很多不同的方式。
MTU规划
回想一下前面的提到的VXLAN,每个原始数据包/帧的顶部添加额外的头。Underlay的底层承载网络需要考虑头部封装产生的额外字节。
一般以太网网卡(NIC)的计算机标准最大传输单元(MTU)是1500字节。以太网帧的总大小是1518(或1522,附加802.1Q标记)。
在VXLAN环境中,由于额外VXLAN封装会有50字节或54字节的额外开销。在Underlay转发时,VXLAN如果报文被分片,根据RFC7348 接收端VTEP上会丢弃分片的报文。
这些额外开销包括:14字节外层MAC+20字节外层IP+8字节UDP+8字节VXLAN头部
如果将原始以太网帧中的802.1Q标记映射到VNI中,并在VXLAN封装前剥离,那么开销会到54字节。
解决方案:
为了提高传输效率,服务器端MTU可能会增加,Jumbo帧可达9000字节。所有通常在部署网络设备时会把MTU设置到最大值(9216),并保持全网统一。
BUM流量转发
我们把Broadcast, Unknown unicast和 Multicast 这些多目的的流量统称为BUM。Underlay网络必须具体承载BUM流量的能力。
目前主要有两种处理BUM流量的方式:
VTEP负责复制报文,采用单播方式将复制后的报文通过本地接口发送给本地站点,并通过VXLAN隧道发送给属于同一VNI的所有远端VTEP。为避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。
从Underlay角度来看,这个包被视为单播转发。
网络工程师可以通过手动配置静态的VTEP列表,也可以通过BGP EVPN动态发布。如果在一个特定VNI中有N个VTEP成员,那么每个VTEP需要生成N-1个副本,由此可见通过BGP EVPN动态更新VTEP列表更合适。 VM 1与VM3的IP地址在同一网段。VM 1想要与VM 3进行通信,但发现没有VM 3的MAC地址,于是发起VM 3的ARP请求报文。ARP请求报文的源IP是VM 1的IP,目的IP是VM 3的IP,源MAC是VM 1的MAC,目的MAC则是全0字段,表示希望获得VM 3的MAC信息。外层封装以太网头,其中目的MAC为全F,表示这是一个广播报文。Leaf A收到了VM 1发来的ARP请求报文,根据其入端口和VLAN信息,判断出这个报文应该匹配VXLAN 10。将VXLAN、MAC、入端口和VLAN信息写入相应的EVI MAC表中。Leaf A发现ARP请求报文是一个广播报文,于是将这个报文在本地和远端所有VXLAN 10的端口进行广播。由于本流程广播采用头端复制的方法,Leaf A将给Leaf B和Spine C各发送一份VXLAN报文。Leaf A发送给Leaf B的报文,最外层是以太网头,接着是IP头,其中源IP是Leaf A的IP,目的IP是Leaf B的IP。再往内是UDP头和VXLAN头,其中VNI为10。最内层是VM 1的ARP请求报文。Leaf A发给Spine C的报文封装相同,不同之处在于外层目的IP是Spine C的IP,外层目的MAC根据下一跳不同而不同。Spine C收到Leaf A发来的报文,发现外层目的IP是自己,于是将其解封装。发现UDP的目的端口是4789,于是将UDP的上层报文进行VXLAN解封装处理。根据VXLAN报文的信息,将VXLAN、内部MAC、入端口等信息写入相应的EVI MAC表中。再发现内部原始二层报文是一个广播报文,根据水平分割的要求,不再往其他VTEP设备转发,只在本地的VXLAN 10端口内进行广播。由于Spine C上没有连接服务器,所以Spine C对这个报文不再进行后续处理,予以丢弃。同样的,Leaf B也收到Leaf A发来的报文,解封装后,将VXLAN、内部MAC、入端口等信息写入相应的EVI MAC表中。由于报文是从Tunnel 1中收到的,所以端口信息为Tunnel 1。根据VXLAN 10的映射关系表,将原始二层报文在本地所有VXLAN 10端口进行广播.最终VM 3收到了VM 1的ARP请求报文,将VM 1的IP和MAC对应关系写入自己的ARP表项,准备进行ARP应答。 组播
同一个VXLAN内的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)在IP网络上为该组播建立组播转发表项,VTEP上相应生成一个组播隧道。组播方式需要在网络中Spine和Leaf交换机都具有组播能力,而且有增加了部署组播的成本。
Overlay网络
Overlay网络是在Underlay的基础上叠加的逻辑网络,实现了网络资源虚拟化。
在云数据中心网络中,对于租户来讲Underlay是完全透明的。每个租户都能拥有一张完全独立的Overlay网络。
Overlay网络具有独立的数据转发平面和控制平面。
对应前面提到的概念,VXLAN是作为数据转发平面;EVPN则是完成控制平面的工作。
Overlay网络架构模型
VTEP作为封装和解封装VXLAN的端点既可以部署在网络设备上(TOR交换机),也可以部署在vSwitch上(服务器上的虚拟交换机)。
下面以VTEP部署在TOR交换机上为例,我们看一下EVPN VXLAN体系Overlay的网络架构。
集中式网关
集中式网关是将网关设置在Spine上或者单独部署Border-Leaf作为网关。以下图为例,网关设置在Spine上,在每个Spine交换机上都设置VLAN的三层接口,VLAN间通信的流量需要首先流经Spine交换机,通过Spine的路由功能完成跨子网通信。
这时就会有一个问题:即使是在同一Leaf下的两台不同VLAN的终端通信,也是需要绕行Spine形成“发卡弯”。
分布式网关
分布式网关是将网关部署在每台Leaf交换机(VTEP)上,使得网关的位置更靠近用户侧,也避免了集中式网关出现“发卡弯”的情况。当然这样的网络架构对Leaf(VTEP)交换机的功能和性能都有更多的要求。
在EVPN VXLAN网络中,VTEP既可以做二层Bridge,也可以做三层Router,因此称为集成桥接和路由,即IRB(Integrated Routing and Bridging)。IRB转发可以分为对称IRB和非对称IRB两种。
非对称IRB
在Ingress入口网关,需要做Layer-2 bridging和Layer-3 routing功能,而在Egress出口网关,只需要做Layer-2 bridging功能。因此是不对称的。如下图所示,在Leaf1先根据虚机所在的VNI A做三层转发,查找路由,出口为VNI B。直接将VM2目的虚机的MAC封装为内层MAC。远端Leaf2解封装后由于目的MAC不是本机MAC,查找MAC表做二层转发。此种模式下,要求每一台分布式网关需要配置EVPN网络内所有VNI的EVI信息,且要求每一台分布式网关维护本租户内所有主机的ARP。
对称IRB
在Ingress入口网关和Egress出口网关,都只做Layer-3 routing功能(同网段则只做briding功能)。因此是对称的。如下图所示,在Leaf1上查找路由,此路由的下一跳指向Leaf2,下一跳对应的MAC为Leaf2的RouteMAC,报文转发时,内层MAC为RouteMAC,VNI为L3VNI。报文到Leaf2后,根据L3VNI获取租户VRF信息,报文在VRF里再次查找路由,通过查找本地ARP表项,将报文往虚机。此种模式下,每一台分布式网关只需要配置其下主机所在VNI的EVI信息和所在VRF的L3 VNI信息,且不需要维护本租户内的所有主机的ARP,只需要维护少量的其他分布式网关对应的MAC即可。
纯二层方式
纯二层方式下部署的Overlay网络只能提供同子网内的二层转发,无法提供路由功能。
如果我们需要VLAN间通信,可以参照单臂路由的方式在Fabric以外部署一台网关路由器。
网络架构本身并无好坏之分,主要还是看是否符合自己的业务场景。
大体上来看:
集中式网关对于多租户的VRF管理更简单,跨子网的流量统计更容易实现,南北向流量为主的网络中更合适。
分布式网关在大型的东西向流量为主的数据中心网络应用更多,不过在Leaf交换机上的配置更为繁琐最好有控制器配合使用。
还有一些环境中对网关的转发能力,表项规格等都要求较高,或者其它原因需要将二三层功能分离,这时可以将Overlay部署成纯二层方式,在Fabric外单独部署网关路由器。
VXLAN EVPN增强特性
ARP广播抑制
在终端租户初次互通过程中,终端租户会发送ARP广播请求报文,而ARP请求报文会在二层网络内(一个VNI内)广播。为了抑制ARP广播请求报文给网络带来的广播风暴,可在VXLAN二层网关设备上使能广播抑制功能。
具体实现:
如果有主机信息,本地Leaf交换机将ARP请求报文中的广播目的MAC地址和Target MAC地址替换为目的主机的MAC地址,并进行VXLAN封装后转发。
如果没有目的主机信息,ARP请求报文中的广播目的MAC地址不变,本地Leaf交换机进行VXLAN封装后转发。
有一点注意的是: ARP广播抑制suppression,是利用EVPN传递的已知主机信息将ARP广播转为单播,这点不同于代理ARP。
ARP代答
在EVPN VXLAN网络中,当Leaf交换机收到一个ARP请求报文时,会将该报文在域内广播。如果Leaf交换机在某一时间段内收到大量的ARP请求报文,并将这些报文都进行广播,VXLAN网络中就会出现大量的ARP请求报文,占用过多的网络资源,造成网络拥塞,导致网络性能下降,影响用户业务的正常运行。为了解决上述问题,可以在Leaf交换机部署基于BD的ARP二层代答。
具体实现:
开启基于BD的ARP二层代答之后,当Leaf交换机本地端口收到ARP报文之后,设备会侦听报文中携带的ARP源信息,并将其中的源IP地址、源MAC地址、报文的入接口等信息记录到本地的ARP Snooping表项中,作为后续ARP二层代答的依据。同时,各个Leaf(VTEP)之间会通过BGP EVPN路由Type2 互相同步各自侦听到的用户ARP信息,然后补充到本地的ARP Snooping表项中,这类信息记录了源IP地址、源MAC地址、报文的源VTEP IP地址。
当Leaf交换机本地端口再收到ARP请求报文时,设备首先根据报文中的目的IP查找本地的ARP Snooping表项:
如果查找成功,则用查找到的信息对ARP请求报文直接进行代答。
如果查找失败,则按原有的流程处理该ARP请求报文。
MAC Mobility
在云场景中,虚机迁移是一种常见的情况。为了防止多次快速迁移出现网络中路由互相冲突的情况。EVPN Type2路由引入了序列编号。
如图,
Host H从L1迁移到L2再到L4。
L1通告H的Type2路由序号是0;然后H迁移到L2,L2通告新的H的Type2路由序号是1;然后H迅速迁移到L4,L4通告新的H Type2路由序号2。
当L2收到序号2的路由就会意识到H已经迁移,发出withdraw消息撤销自己发出的序号1的路由;
由于一些原因,这时L1可能几乎同时收到L4的序号2路由和L2的withdraw撤销序号1的路由。
最后L1因为有序号2的路由,即使延时收到了序号1的路由也会丢弃。
ESI多活技术
在EVPN VXLAN场景中,为了避免接入侧单点故障,我们可以采用ESI方式很好解决。
ESI场景中主要包括以下:
DF选举
EVPN的DF选举机制,即从LS2和LS3中指定一个来转发BUM流量。如果LS2被选举为主DF,则从H1方向发来的BUM流量将只从LS2向H2转发,而未被选中的LS3则成为备份DF。具体选举过程可以参考:
路由负载与别名
H2双归至LS2和LS3,且LS2和LS3处于多活模式。此时,LS2和LS3通过以太自动发现路由(Per ES)将多活模式信息发送给LS1,之后LS1在向H2发送单播流量时,会同时向LS2和LS3发送,从而形成负载分担。
EVPN还支持别名功能。在接入侧多归多活场景中,多归的Leaf中有些Leaf可能学习不到VM侧的MAC地址,此时远端Leaf可以通过多归Leaf发来的以太自动发现路由(Per EVI)携带的ESI值来感知到VM侧的MAC地址可达性,这个功能被称为别名。
快速收敛
在传统 flood-and-learn 模式下,收敛速度受限于路由条目。例如H2是一台Hypervisor,上面管理了100台虚机,LS3到H2的链路故障时,LS3需要撤销通告H1-100的Type2路由,这段撤销的时间就会形成路由黑洞。EVPN的解决方法,LS3首先先撤销Type1 ESI路由,LS1得到ESI的撤销通告后会清除下一跳到LS3的MAC路由。
跨数据中心通信
随着业务不断发展,我们会面临多地域部署数据中心的情况。数据中心互联DCI(Data Center Interconnection)是不同数据中心之间互相通信的一种解决方案,在数据中心之间既要实现同VLAN内终端之间的互相通信,也要实现不同VLAN的终端间互相通信。
端到端VXLAN
数据中心A的Leaf1和数据中心B的Leaf4之间运行BGP EVPN协议传递MAC路由或者主机路由信息,在传递时不改变MAC路由或者主机路由的下一跳地址,从而在跨数据中心的Leaf1和Leaf4上的VTEP之间建立端到端VXLAN隧道。
VLAN hand-off
分别在数据中心A、数据中心B内配置BGP EVPN协议创建VXLAN隧道,实现各数据中心内部VM之间的通信,Leaf2和Leaf3通过二层子接口方式接入DCI-VTEP1和DCI-VTEP2,DCI-VTEP1和DCI-VTEP2之间配置EVPN协议创建VXLAN隧道,实现数据中心之间的通信。Leaf2/Leaf3将收到的数据中心侧的VXLAN报文进行解封装,然后发送到DCI-VTEP,DCI-VTEP将收到的VLAN报文重新封装成VXLAN报文后发送给对端DCI-VTEP,实现VXLAN隧道对跨数据中心的报文端到端的承载,保证跨数据中心VM之间的通信。
Segment VXLAN
通过Segment VXLAN实现数据中心互联是指在两个数据中心内部各建立一段VXLAN隧道,数据中心之间再建立一段VXLAN隧道。分别在数据中心A、数据中心B内配置BGP EVPN协议创建分布式网关VXLAN隧道,实现各数据中心内部VM之间的通信。Leaf2和Leaf3是数据中心内连接骨干网的边缘设备,通过在Leaf2和Leaf3上配置BGP EVPN协议创建VXLAN隧道,将从一侧数据中心收到的VXLAN报文先解封装、然后再重新封装后发送到另一侧数据中心,实现对跨数据中心的报文端到端的VXLAN报文承载,保证跨数据中心VM之间的通信。
这种方案的限制:数据中心内部只能部署分布式网关
外部路由
在Spine-Leaf网络架构的数据中心,我们通常把连接外部网络的Leaf称作Border Leaf。Border Leaf负责二层和三层形式的外部互联,本章内容我们主要讨论几个通过Border Leaf提供对外的三层互联的场景。
VRF Lite
VRF Lite是最简单易行的方案,在Border Leaf上设置所有的VRF实例,前缀信息从EVPN网络中注入特定的VRF路由表。路由信息通过路由协议在Border Leaf上与外部路由器交换。
不过这个方案的扩展性有限,每一个VRF都需要一个对等会话。
MPLS Layer 3 VPN
VXLAN EVPN和MPLS L3VPN可以在EVPN地址族和VPNv4地址族之间交换第3层可达性信息。VXLAN EVPN的Border Leaf同时也充当MPLS L3VPN的PE,从而我们将其定义为BorderPE。BorderPE收到来自Leaf的路由信息通过reoriginate方法注入到L3VPN地址族(VPNv4),反方向类似操作。
这种方式将两种封装和地址族结合在一起,称之为”single-box“解决方案。
共享VRF
在许多情况下数据中心网络中会为多租户提供公共类的资源或工具,这就需要我们能引入共享VRF的概念。这样的方式也适用于为多租户提供外部服务。
VRF 通过route leaking可以实现交换机上多VRF之间泄露路由前缀,同时当流量定向到一个特定前缀时,必须能做出封装。
例如下图:
从192.168.1.101去往192.168.2.102,首先在进入VTEP V1时,VRF-A中可以看到192.168.2.102,因为做了路由泄露,转发角度看,去往192.168.2.102的数据包在VTEP V1上封装VNI50001朝向VTEP V2,数据包到达VTEP V2时,会在VRF-A中查找到192.168.2.102然后本地泄露到VRF-B。
除此之外,Downstream VNI也是一种可选VNI分配方案,它使用控制平面协议驱动在数据平面封装使用的VNI。BGP EVPN路由更新时VNI信息是EVPN NLRI的一部分,出现在Type2和Type5路由中。
例如下图:
从192.168.1.101去往192.168.2.102,数据包在VTEP V1会封装VNI50002。
这里用于封装的VNI由目标VTEP和目标端点决定的,因此称为Downstream VNI。
如果每个VTEP开始对每个VRF使用不同的VNI,那么所需的每VTEP、每VNI信息的数量可能会激增。这会对硬件表规模有额外需求。因此,建议在通用互联网VRF或共享服务VRF合理规划。
参考
Building Data Centers with VXLAN BGP EVPN(CISCO)
evpn-implementation-for-next-generation-data-centers(Juniper)
华为CloudEngine 产品文档(Huawei)
新IT老爬虫-SDN专题(H3C)
后记
文章中主要以VTEP设置在Leaf交换机(TOR)展开讨论,但是随着智能网卡的发展,让VXLAN封装和解封装的工作能可以卸载到网卡上进行,这也使得越来越多的数据中心网络开始选择把VTEP放在服务器的侧。这种做法在公有云大厂已是非常成熟的部署方案了,它更进一步解耦了Underlay和Overlay网络,并且更便于集中控制器统一管控,更符合云计算特点和需求。
在这样的趋势下,对于网络工程师无疑也是不小的挑战。“Software is eating the network”的口号令传统网络工程师不寒而栗,像以前只会操作几家厂商的网络设备就能的谋求一个饭碗的时代真的一去不复返了!
五一期间由于突然严重的疫情形势只能窝在家中,本来打算的出游计划也就此泡汤。不过窝在家中也有窝在家中的好,难得从日常重复琐碎的工作中抽身出来对以往的知识做一下归纳总结。
以上博文根据本人从事网络工作这些年的工作经验以及相关知识加以梳理总结而成,如有疏漏或不足之处还请留言加以指正!