VXLAN L3应用E***,呈现完整overlay网络

前言

VXLAN(Virtual eXtensible LAN)是一种overlay网络技术,由RFC7348定义。VXLAN本质上是MAC in IP(或者说MAC in UDP),这样,可以在一个L3 IP网络上,构建一个L2网络。这里的L2网络是overlay网络,L3网络是underlay网络,并且L3网络对overlay网络来说是透明的(感知不到)。L3网络可以是一个数据中心的IP网络,也可以是跨数据中心的基于***的IP网络。所以,使用VXLAN可以达到:

☘    在一个DC(Data Center)内的多个机架或者机房间,提供L2连接。使用VXLAN可以避免在机架或者机房间构建物理的L2连接,这样在布线上要简单一些。

☘    在多个远距离的DC之间,提供L2连接,只要这些DC之间有L3连接。


VXLAN为overlay网络中的主机(物理,虚拟)提供了一个在L3网络之上的L2服务,这通常称为VXLAN bridging。同时Overlay的 L2网络是支持多租户的,也就是支持多个隔离的L2网络。这些隔离的L2网络之间怎么通讯?与其他的隔离技术,例如VLAN一样,需要通过routing。所以这次说说VXLAN的routing以及E***对VXLAN routing的支持。VXLAN routing传统上是通过集中式的L3GW(VXLAN Router)来完成。所有的L3转发,都需要经过L3 GW,才能从一个L2网络转发到另一个L2网络。

VXLAN L3应用E***,呈现完整overlay网络

如果两个主机,在不同的VXLAN L2网络,但是在同一个VTEP(VXLAN Tunnel Endpoint)下面,当它们彼此想通讯时,网络流量也要先从VTEP流向L3GW,在L3GW完成3层转发,再回送到同一个VTEP。这种绕啊绕的流量是一种发卡(hair-pin)流量。按照这种方式,VXLAN routing已经实现了,但这里有两个问题,一个是流量瓶颈,集中式的L3GW的性能决定了三层流量的最大速率;另一个是发卡流量,发卡流量会带来不必要的网络负载。


E***可以作为VXLAN的控制层面,E***技术为VXLAN的L3优化也提出了解决方法。下面看看E***怎么完成的VXLAN routing,首先看一下E***提出的数据层面的优化,接着介绍E***作为控制层面如何支持优化过的数据层面。


一、Routing和Bridging集成


VTEP本身是支持L2桥接(Bridging),同一个VTEP连接的主机之间的L2通讯,不会生成VXLAN数据,而是直接在VTEP就完成转发。VXLAN IRB(Integrated Routing and Bridging)是指在VTEP上同时实现L2桥接和L3路由(Routing)功能。同一个VTEP下面的L3流量也不会生成VXLAN数据,只是在VTEP完成转发。


有关IRB的实现,在E***的一份应用草案Integrated Routing and Bridging in E***有描述。


1.1 VRF


VRF可以称为Virtual Routing&Forwarding,有时候也称为*** Routing&Forward,这是一个类似Linux network Namespace的东东。VRF一般运行在专用网络设备上,每一个VRF都有独立的转发信息。这样,不需要多个设备,而只是在一个设备上,就可以为多个租户创建隔离的环境,每个租户用自己VRF,独立完成路由转发。下图中,在一个设备上就可以为三个租户实现三个隔离的VRF。

既然叫VRF,那么没有悬念,它的功能是跟路由/转发联系在一起。在E***里面,VRF有两种,MAC-VRF和IP-VRF。MAC-VRF可以看成L2交换机,IP-VRF可以看成L3路由器。它们之间的关系如下图所示:

1.2 分布式网关DAG

路由器的工作方式就是在网关(Gateway)之间进行路由转发,既然IP-VRF可以看成路由器,那么IP-VRF也需要网关。前面说了集中式网关的问题,一般集中式的问题,分布式来解决,所以这里定义一个分布式网关:DAG(Distributed Anycast Gateway)。DAG在所有VTEP上的相关IP-VRF里都存在,并且具有相同的MAC/IP地址。也就是说,原来集中式的VXLAN L3 GW,被复制了多份,分别放在了每个VTEP中,并且插入在IP-VRF上,相应的示意图如下所示,同一租户的同一个Gateway,在每个VTEP上都有。

由于DAG在每个VTEP上都有,前面的两个问题都不存在了。首先,瓶颈问题不存在了,因为现在瓶口变多了;其次发卡流量问题不存在了,因为VTEP就有网关,同一个VTEP下的L3转发可以不出VTEP(不生成VXLAN)。DAG在所有的VTEP上采用相同的IP/MAC,一方面可以减少IP的占用,另一方面主机从一个VTEP迁移到另一个VTEP,主机内的Gateway信息不需要更新。


当VTEP连接的主机需要做L3路由转发时,总是选用最近的DAG,也就是当前VTEP上的DAG,来完成路由转发。这里的路由转发怎么完成?有两种方式。


1.3 非对称路由IRB

非对称路由,以下图为例,我们可以看到一次完整请求的来回路径不一样,所以这种模式被称为非对称路由(Asymmetric IRB)。

以ping为例子来说明吧,当Host A访问Host B时。Host A将ping包发送到自己所连接的VTEP1(V1)。由于这是一个跨子网的请求,在Host A中会将ping包的目的MAC地址封装成网关的地址(DAG MAC地址)。根据目的MAC地址,VTEP1可以发现这是一个需要做L3转发的请求,所以转到IP-VRF处理。IP-VRF中会存有Host B对应的VXLAN ID和MAC地址。为什么会有?这是E***控制层完成的,后面会介绍。接下来VTEP1会将Host B的MAC替换ping包里面的目的MAC(原来是DAG MAC),并且用VXLAN ID将ping包封装在VXLAN包中,通过黄色VXLAN tunnel 发送给VTEP3(V3)。黄色的VXLAN实际就是Host B所在的VXLAN。


VTEP3收到黄色VXLAN tunnel发来的数据,直接在自己的MAC-VRF中处理,前面说过MAC-VRF相当于L2交换机,因此MAC-VRF可以直接将请求转到当前VTEP直连的Host B。整体的流程如下所示:

Host B向Host A返回数据时,先发送给VTEP3,类似的,直接在VTEP3将数据封装成Host A所在的蓝色VXLAN数据,发送给VTEP1。同样类似的,VTEP1收到蓝色的VXLAN数据,在本地的通过本地的MAC-VRF查找,找到对应的MAC地址记录,发送给Host A。


找了个ARISTA的图(侵删),所以可以看出,路由发生在源VTEP,之后才做VXLAN封装,走VXLAN的二层网络:

1.4 Symmetric IRB

对称路由,以下图为例,我们可以看到一次完整请求的来回路径是一样的,所以这种模式被称为对称路由(Symmetric IRB)。

对称路由与非对称路由的区别在于,对称路由多了一个黑色的L3 VNI。


还是以ping为例子来说明吧,当Host A访问Host Y时。Host A将ping包发送到自己所连接的VTEP1(V1),由于这是一个跨子网的请求,在Host A中会将ping包的目的MAC地址封装成网关的地址(DAG MAC地址)。根据目的MAC地址,VTEP1可以发现这是一个需要做L3转发的请求,所以转到IP-VRF处理。到此为止,都与非对称路由一样,接下来是不一样的部分。在IP-VRF中存的是L3 VNI和Host Y所在的VTEP3(V3)的MAC地址。接下来,VTEP1会用VTEP3的MAC地址替ping包的目的MAC(原来是DAG MAC),并且用L3VNI封装VXLAN数据,通过黑色的VXLAN tunnel,发送给VTEP3。


VTEP3收到黑色VXLAN数据,首先在自身的IP-VRF中做路由,再发送到相应的MAC-VRF,最后转发给Host Y。回程是类似的流程。


整体流程如下图所示:

VXLAN L3应用E***,呈现完整overlay网络

对比这两种路由方式,非对称路由(Asymmetric IRB)实现简单,没有额外的VXLAN分配,但是需要在所有的VTEP上创建所有子网的网关,即便当前VTEP没有连接子网中的主机。因为从上面的图可以看出,VTEP需要同时连接非对称的两条VXLAN tunnel,即使VTEP1没有黄色VXLAN中的Host。对称路由(Symmetric IRB),实现更复杂,但是VTEP只需要连接自己管理主机的VXLAN和L3 VNI即可。这两种分布式路由方式各有利弊,谁也替代不了谁,有些厂商两种方式都实现了,有些只实现了一种。


二、VXLAN Routing控制层


前面的介绍提到了MAC-VRF和IP-VRF。MAC-VRF实现bridging,MAC-VRF中存的是L2转发信息,L2转发信息的传递在上一篇VXLAN with E*** as Control Plane中有介绍,我就不再重复,感兴趣的可以回去看看。接下来单独看一下E***如何传递IP-VRF中所需的L3转发信息。


先回顾一下,E***作为VXLAN控制层时,MAC/IP Route(Route type 2)的格式。

VXLAN L3应用E***,呈现完整overlay网络

对于L2信息的传递,里面有两个可选项:IP Address和L3 VXLAN ID。如果还需要传递L3信息,这两个选项将不再是可选项,首先IP地址必须填上,这样IP-VRF做包封装的时候,才能够根据目的IP获取信息。如果采用Symmetric IRB,L3 VXLAN ID也必须填上,因为对称路由需要有一个专门的VXLAN通道来传递L3数据。


接下来过一下控制层数据传递过程,VTEP还是通过Local learning(检测ARP或者其他的包)获取本地连接主机的IP/MAC,再生成BGP Route。这条BGP Route里面,实际包含了MAC转发信息和IP转发信息。因此在BGP Route之后,会跟两份RT(Route Targets),一份为了MAC-VRF,另一份为了IP-VRF。对端的VTEP,根据RT接收相应的BGP Route,MAC-VRF记录MAC转发信息,IP-VRF记录IP转发信息,具体如下:

☘    Asymmetric IRB:IP-VRF会记录Host的IP,Host对应的L2 VNI,Host所在的VTEP信息,以及Host的MAC地址。有这些信息,IP-VRF就能够根据目的IP地址完成L3转发以及VXLAN数据封装。

☘    Symmetric IRB:IP-VRF会记录Host的IP,Host对应的L3 VNI,Host所在的VTEP信息(这里会更复杂一些)。有这些信息,IP-VRF就能够根据目的IP地址完成相应的L3转发VXLAN数据封装。


所以可以看出,在原有的Route type2中注入可选的IP地址和L3 VXLAN ID,就可以传递VXLAN routing所需要的信息。


这种模式适合VTEP下直接连接的就是主机,且一个租户网络的主机分散在各个VTEP下,每个VTEP都连接拥有离散的IP地址的主机。


如果VTEP下面连接的不是主机,而是其他转发设备,例如路由器呢?这个时候,VTEP会看到大量连续的IP地址从同一个MAC地址发出(路由器网关MAC地址),如果这个时候还是用Route Type 2,有以下问题:

☘    明明是一个IP prefix(路由器连接的其他子网的CIDR)可以表示的IP地址段,现在只能每个IP发出单独的BGP route。也就是说,明明一条BGP route就能搞定的转发,现在只能分成成千上万条BGP route进行转发。

☘    当路由器网关是floatingip时,如果发生了迁移,IP地址将保持不变,但是对应的MAC地址可能会发生变化,那么所有通过网关转发出来的IP地址都需要发一遍BGP Route,来更新MAC地址的变化。


三、Route Type 5


所以,为了支持在VTEP下连接转发设备,并且支持VXLAN L3,E***需要进一步改进(扩充)。E***的另一个应用草案,IP Prefix Advertisement in E***解决了上面的问题。先来回顾一下E***所有新增的MP-BGP路由种类。

VXLAN L3应用E***,呈现完整overlay网络

所以这次到了Route type 5,来看看Route Type 5的格式。

VXLAN L3应用E***,呈现完整overlay网络

对于VXLAN来说,只需要关注以下内容:

☘    IP Prefix Length和IP Prefix:目的IP地址段。

☘    GW IP Address:VTEP可达的网关,IP Prefix表示的IP地址段都通过这个网关进一步转发。


Route Type 5并非单独使用,而是配合前面的Route Type2一起使用。VTEP首先会将自己连接的GW IP(例如路由器网关)及其对应的MAC地址和其他信息,封装在Route Type 2中,再发送到其他VTEP。这样,其他的VTEP首先知道了如何到达GW IP。这里可以把GW IP看成一个Host IP。


接下来再发送Route Type 5,从上面的图可以看出,Route Type 5唯一做的就是将一段IP地址(IP Prefix),与GW IP关联在一起。


我们来回顾一下上面两个问题:

☘    有关IP Prefix的L3转发信息传播。现在不管IP Prefix长度是多少,只需要一条Route Type 2传递网关,再来一条Route Type 5传递IP Prefix信息。当VTEP(IP-VRF)收到了目的IP地址在IP Prefix的网络包时,根据IP Prefix找到GW IP,再将网络包发送到GW IP。只要网络包到达了GW IP,就可以依赖GW自身的转发能力,将网络包继续转发到真正的设备。这实际上跟现实中的多个路由器转发类似。

☘    如果GW IP是floatingip,当其MAC地址发生变化,只需要先发送一条BGP withdraw命令,撤回之前有关GW IP的Route Type 2信息,之后再发送一条新的BGP Route Type 2,将GW IP的新MAC地址带上即可,完全不用处理IP Prefix的更新。


四、总结


VXLAN L3中应用E***大体情况说完了。回过头来看,E***最早提出是为了解决MPLS L2 ***由于数据层学习(flood-learn)带来的问题,解决办法是在MP-BGP基础上,新增了E***协议地址族,其中E是Ethernet。随着技术的发展,E***已经不再局限在L2的范围,而在讨论E***的时候,也不再特指一种L2 ***,而是指MP-BGP中的一种协议地址族。


另一方面,由于VXLAN本身并未设计控制层,VXLAN提出的最开始也是通过数据层学习获得转发信息,因此,E***也可以用来为VXLAN提供一个控制层,抑制VXLAN的BUM包,提升VXLAN数据层的效率。E***作为VXLAN的控制层,同时提供了L2、L3转发信息的传递,所以结合E***和VXLAN,可以提供一个完整的overlay基础网络。


这些目前都还是在一个数据中心内部。VXLAN本身可以在任意的underlay L3网络之上构建overlay网络,文章最开始说过,如果跨DC之间有L3网络连接,VXLAN同样也可以构建。所以,E***结合VXLAN的另一大用途就是用来做DC互联,希望下次有机会再说说这方面。


上一篇:day18多线程


下一篇:SDN私享汇(十五):SDN之道Juniper Contrail深入解析