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

作者简介:肖宏辉,毕业于中科院研究生院,8年的工作经验,其中6年云计算开发经验,OpenStack社区积极活跃,有超过300个commit和超过30000行代码的贡献。目前关注SDN/NFV等虚拟网络技术。本文所有观点仅代表作者个人观点,与作者现在或者之前所在的公司无关。

前言

VXLAN(Virtual eXtensible LAN)是一种overlay网络技术,由RFC7348定义。VXLAN本质上是MAC in IP(或者说MAC in UDP),这样,可以在一个L3 IP网络上,构建一个L2网络。这里的L2网络是overlay网络,L3网络是underlay网络,并且L3网络对overlay网络来说是透明的(感知不到)。L3网络可以是一个数据中心的IP网络,也可以是跨数据中心的基于VPN的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以及EVPN对VXLAN routing的支持。VXLAN routing传统上是通过集中式的L3GW(VXLAN Router)来完成。所有的L3转发,都需要经过L3 GW,才能从一个L2网络转发到另一个L2网络。

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

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

一、Routing和Bridging集成

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

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

1.1 VRF

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

既然叫VRF,那么没有悬念,它的功能是跟路由/转发联系在一起。在EVPN里面,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地址。为什么会有?这是EVPN控制层完成的,后面会介绍。接下来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。回程是类似的流程。

整体流程如下图所示:

对比这两种路由方式,非对称路由(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 EVPN as Control Plane中有介绍,我就不再重复,感兴趣的可以回去看看。接下来单独看一下EVPN如何传递IP-VRF中所需的L3转发信息。

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

对于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,EVPN需要进一步改进(扩充)。EVPN的另一个应用草案,IP Prefix Advertisement in EVPN解决了上面的问题。先来回顾一下EVPN所有新增的MP-BGP路由种类。

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

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

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

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


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。
  • 本文链接http://www.sdnlab.com/19879.html
分享到:
相关文章
6条评论

登录后才可以评论

  1. comment reply 石头子来了 2017/11/09 11:22
    请问一下,如果在数据中心内使用EVPN+Vxlan,数据中心间也同样使用此等技术;相比数据中心内部使用TRILL,数据中心间使用OTV,这两者的从技术实施的复杂度和效率方面,是否有一些区别?
        1楼
  2. comment reply 毛健炜 2017/12/04 09:49
    EVPN与PBB的组合,目前几乎没有看到这样的应用,不知是为何?期待您对这块的梳理讲解,读您的文章受益良多!
        2楼
  3. comment reply 毛健炜 2017/12/04 10:36
    请教一下,为何Asymmetric IRB中,不能只当VTEP下有10.0.1.0/24网段的主机时,才创建10.0.1.1/24这个网关呢?按照文中所述路由流程,我觉得这样做是可以的,如果当前VTEP下只有10.0.2.100/24这个网段的这个主机,它要访问10.0.1.1/24,它找的也只是10.0.2.1/24这个自己网段的网关,在这个VTEP下不需要创建10.0.1.0/24这个网关。不知我的这个想法是否正确呢?
        3楼
  4. comment reply 毛健炜 2017/12/04 10:39
    也就是说,只需要10.0.2.1/24这个网关能够封上10.0.1.0/24网段的VXLAN ID,发出去,就OK了,而且这在Asymmetric IRB中原本就是这样的
        4楼
  5. comment reply 肖宏辉 2017/12/12 10:09
    @石头子来了 你好,EVPN也可以应用在数据中心间,也就是DCI,这通常是结合MPLS L3 VPN实现,感兴趣可以参考【1】。至于和TRILL OTV的对比,我没有做过。抱歉这么晚回复。 【1】https://tools.ietf.org/html/draft-ietf-bess-dci-evpn-overlay-05
        5楼
  6. comment reply 肖宏辉 2017/12/12 10:33
    @毛健炜 你好,EVPN+PBB更多是在运营商内部,这不是我现在关注和了解的领域。我主要关注数据中心网络,这也是EVPN+VXLAN的应用所在。 Asymmetric IRB的问题。你的理解是正确的,网关可以是虚拟的。只要在VTEP上(甚至不需要10.0.2.1/24这个网关),做好相应的路由转发封装,将正确的数据包发出就行。这里只是说逻辑上需要创建网关。 但是就是这个逻辑上的网关,哪怕没有实际的网关设备,也是需要有数据在VTEP上,以OpenFlow的实现为例,需要针对每一个目的IP prefix,10.0.2.0/24, 10.0.3.0/24, 10.0.3.0/24,都做匹配,变换MAC地址,封装相应的VXLAN ID,每一个相关的VTEP的负担随着L3网络中的子网数的增加而变大。而对称路由就不存在这个问题,对称路由不用记住IP prefix对应的vxlan id,子网数的增加,对VTEP来说没有影响。
        6楼
肖宏辉 发表于17-09-20
7