IP技术 -- 11 VXLAN之二

蓝咒 提交于 2020-02-09 01:42:40

在数据中心大二层网络技术中有提到,Overlay技术是目前大二层网络最热点的技术,可适用于目前整个数据中心,甚至跨数据中心的大二层组网。

随着数据中心租户规模的越来越大,虚拟机的数量也大幅增加,此时传统二层网路的隔离技术VLAN因其Tag域只有12bit,仅能划分出4096个虚拟二层网络,已经无法满足大二层网络中标识大量用户集的需求,同时,为了使数据中心的资源得到灵活的调配,需要支持虚拟机跨分区,甚至跨数据中心的灵活迁移,这时基于VLAN的传统二层网络很难做到虚拟机在迁移前后的IP和MAC地址不能改变

为了帮助数据中心完成上述挑战,VXLAN(Virtual eXtensible Local Area Network)技术应用而生,是一种在三层网络上构造虚拟化二层网络的技术。

首先,VXLAN引入了类似VLAN ID的用户标识,称为VXLAN Network Identifier(VNI),它由24bit组成,可以构划分出1600万个相互隔离的虚拟二层网络,可以支持大二层网络的用户隔离

其次,VXLAN使用MAC in UDP的封装方式,将虚拟机发出的原始以太报文,完整的封装在VXLAN信息中,在现有承载网络中进行透明传输,到了目的地,通过解封装VXLAN信息,将原始二层报文发给目标虚拟机,从而实现了虚拟机之间的相互通信,这样,虚拟机彻底摆脱了二三层网络的范围限制,可以跨设备,跨分区,甚至跨数据中心的自由迁移

这里,在承载网络中进行透明传输的MAC in UDP包含的VXLAN信息报文究竟长什么样呢?

除了虚拟机发出的原始报文外,添加8字节的VXLAN帧头,该帧头中的24位VNI用于标识该报文处于哪个VXLAN隧道,然后添加外层UDP报头,其目的端口号为4789,用于标识该报文为VXLAN报文,最后使用承载网络的IP和MAC地址作为外层头进行封装,这样,封装后的报文就像普通IP报文一样,可以通过承载网络进行转发。

为了将本端发送的原始报文通过VXLAN网络传送给远端虚拟机,需要指定进行VXLAN信息封装/解封装的设备VTEP,在两个VTEP之间建立VXLAN隧道,VXLAN可以通过静态/动态两种方式进行建立,

静态方式是用户手动方式指定VXLAN的源/目的IP地址,作为本端/对端的VTEP地址,从而人为的在本端VTEP和对端VTEP之间建立VXLAN隧道。这种方式下,如果添加新的VTEP,需要手工为所有的VTEP建立新VTEP之间的VXLAN隧道,当VTEP越来越多时,这种方式就显得越来越麻烦了。

动态方式是在VTEP之间建立BGP EVPN邻居关系,通过BGP EVPN协议自动在本端和远端VTEP之间建立VXLAN隧道。如果新增VTEP,就需要手工在所有VTEP与新的VTEP之间建立BGP EVPN全连接,部署还是比较麻烦

没关系,因为通过在网络中部署EVPN路由发射器RR可以很轻松的解决这个问题,这里,所有VTEP都只需要跟RR建立BGP EVPN邻居关系,RR收到新的VTEP加入的消息后,会发射给所有路由器,从而在所有VTEP和新的VTEP之间自动建立VXLAN隧道。

VXLAN隧道建立成功后,如何确定网络中的每个报文是否需要进入VXLAN隧道,且具体属于哪个VXLAN隧道呢?

1. 二层子接口接入VXLAN隧道

二层子接口是VTEP上的逻辑接口,它归属于VTEP物理接口下,通过配置不同的流封装类型并绑定VNI对应的广播域BD信息,以将不同的二层报文接入VXLAN隧道。

当前的流封装类型有以下几种:

untag类型:该类型接口只接收不带vlan tag的报文,不论是对原始报文进行VXLAN封装还是解封装VXLAN报文,该类型接口都不会对原始报文进行VLAN tag处理,包括添加、替换和隔离

dot1q类型:该类型接口只接收具有给定vlan tag的报文,该类型接口对原始报文进行VXLAN封装时,会剥离外层的VLAN tag,在解封装VXLAN报文时,如果内层报文带有vxlan tag,则替换成指定的VLAN tag后进行转发。如果内层报文没有VLAN tag,则添加指定的VLAN tag后进行转发

default类型:该类型接口接收所有报文,不论其是否带有VLAN tag,不论是对原始报文进行VXLAN封装还是解封装,该类型接口都不会对原始报文的VLAN tag进行处理,包括添加/替换或隔离。

2. VLAN接入VXLAN隧道

在部署网络时,若一个物理接口收到n个携带VLAN的报文,且这些报文都需要进入VXLAN隧道,那使用二层子接口接入VXLAN隧道,则需要创建N个二层子接口进行配置,比较麻烦,VLAN接入VXLAN子接口的技术就可以解决这个问题

这里只需要物理接口下允许携带这些VLAN的报文通过,然后在VLAN下绑定VNI对应的BD信息,这样就可以很简单的将这些报文接入VXLAN隧道。报文进入VXLAN隧道后,具体是如何在VTEP上进行VXLAN封装/解封装?在网络上又是如何进行转发的?

同网段的VM-A/VM-C通信案例:

以ARP的请求和ARP应答报文的传输来介绍广播/单播报文在VXLAN网络中的转发过程

VM-A与VM-C通信时,首先应发送ARP请求报文,请求得到VM-C的MAC地址

VTEP-1收到VM-A发送的ARP请求报文后,会根据报文中的VLAN判断报文需要进入VXLAN隧道,且对应的VNI为5000<VNI由VTEP来指定>

然后VTEP-1将VM-A的MAC地址学习到本地MAC表中,并记录其对应的VNI 5000,入接口Port-1,此时VTEP-1发现报文是ARP请求报文,因此需要对报文按照头端复制的机制的方式向其所有的对端VTEP进行广播处理。VTEP-1将报文进行复制,并封装VXLAN信息后,发送到同属于VNI 5000的VXLAN隧道邻居VTEP-2和VTEP-3

封装后的报文根据外层MAC和IP信息在IP网络中进行传输,直到到达对端VTEP,VTEP-2和VTEP-3对报文进行解封装,剥掉VXLAN信息后,得到VM-A发送的原始报文。

VTEP-2和VTEP-3将VM-A的MAC地址学习到本地MAC表中,并记录其对应的VNI为5000,远端VTEP地址为IP-1

VTEP-2和VTEP-3根据VM-A发送的原始报文中的VLAN信息,将报文在对应的VLAN中进行广播,

VM-B和VM-C接收到VM-A发送的ARP请求后,VM-B发现目的IP不是本机IP,会将报文丢弃。 VM-C发现目的IP是本机IP,则对ARP请求进行应答,VM-C会向VM-A发送ARP应答报文

VTEP-3收到VM-C发送的ARP应答报文后,根据报文中的VLAN判断报文进入的VXLAN隧道VNI为5000,VTEP-3会将VM-3的MAC地址学习到本地MAC地址表中,并记录其对应的VNI为5000,入接口为port-3,查找MAC表,发现到达VM-A的VNI为5000,远端VTEP地址为VTEP-1,从而封装VXLAN信息,并将报文发送给VTEP-1

VTEP-1对报文进行解封装,得到VM-C发送的原始报文。

VTEP-1将VM-C的MAC地址学习到本地MAC地址表中,并记录其VNI为5000,远端VTEP的地址为IP-3,查找MAC表,发现到VM-A的出端口为Port-1,从而VTEP-1将解封装后的报文发送给VM-A,至此,VM-A与VM-C之间就可以愉快的通信了。

不同网段VM之间的通信与普通三层网络类似,需要在网关上部署BDIF接口。VM请求网关的ARP信息,其广播/单播报文的转发流程与同网段类似。

VXLAN典型应用场景

在典型的“Spine-Leaf”结构的数据中心组网中,企业用户拥有多个部门,每个部门拥有多个VM,同部门的VM属于同一个网段,不同部门的VM属于不同的VM,此时该如何部署VXLAN网络来实现同一部门VM之间,不同部门VM之间,VM与Internet之间均可相互访问?

1. 首先,部署VXLAN二层网关,将Leaf1和Leaf2作为VXLAN网络的VTEP,两个Leaf之间建立VXLAN隧道,并在每个Leaf上部署VXLAN二层网关,即可实现同一部门VM之间的通信

2. 其次,部署VXLAN三层网关,根据VXLAN三层网关所在位置的不同,可分为VXLAN集中式三层网关和VXLAN分布式三层网关

在VXLAN集中式三层网关中,Spine/Leaf均作为VXLAN网络中的VTEP,Leaf用于流量的二层接入,Spine承担三层网关功能,此时在Leaf1和Spine1之间,Leaf2和Spine2之间分别搭建VXLAN隧道,并在Spine上部署VXLAN三层网关,即可实现不同部门VM之间,以及与Internet之间的相互通信。

在VXLAN分布式三层网关中,Leaf节点作为VXLAN网络的VTEP,同一个Leaf节点可以做VXLAN的二层网关,和三层网关,此时在单个Leaf上面部署VXLAN 三层网关,即可实现该Leaf下不同部门VM间的本地三层通信

在不同Leaf上的部署VXLAN三层网关,两个VXLAN三层网关直接按通过MP-BGP建立VXLAN隧道,并通过BGP的Remote-nexthop属性发布本网关下挂的主机路由信息给其它BGP邻居,即可实现跨部门之间不同VM之间的相互通信

VXLAN集中式三层网关与VXLAN分布式三层网关对比如下:根据实际需要选择部署方案

在前面介绍的VXLAN网络中,VM与Leaf之间,Leaf与Spine之间都是透过单归方式接入的,这种接入方式,已经不能满足用户对VXLAN网络可靠性的需求。

此时,可以采用堆叠(iStack)方式/M-LAG双归接入方式提升接入层的可靠性,并透过采用多活网关方式提升核心层的可靠性

1. 采用堆叠方式提升接入层的可靠性

接入层的设备数量繁多,堆叠方式可以将多台交换机组合在一起,虚拟化为一台交换设备,所有配置均在一台虚拟交换机上进行,从而简化了接入层设备的运维复杂性

此外,堆叠系统内成员交换机之间在进行冗余备份的同时,能够利用跨设备的以太Trunk实现设备间链路的负载分担。

堆叠通过集中配置的方式,使得部署较为简单,但是堆叠系统无法进行独立升级,且升级期间,业务中断时间较长,此时可以采用M-LAG双归接入方式来提升接入层的可靠性,在这种方式下,组成M-LAG的两台设备不需要同时升级,保证了升级过程中业务流量的转发,但与堆叠方式相比,配置较为复杂

2. 采用多活网关方式提高核心层的可靠性

核心层设备物理位置较为分散,传统的设备级备份无法满足要求,必须透过协议级备份来实现。在多活网关组网中,通过给多台spine设备部署相同的IP地址,MAC地址等网关信息,将它们对外模拟为VX网络中的一个虚拟的VTEP,然后在所有Spine设备上配置三层网关,使得流量无论发送到哪个Spine,该设备都可以提供服务,将报文正确转发给下一跳设备

此外,多活网关中的多台Spine设备之间形成负载分担关系,共同进行流量转发。

当网络中的设备越来越多,网络结构越来越复杂时,为了方便对网络各节点的控制与部署,可以透过控制器方式来部署VXLAN网络,控制器是统一的网络控制平台,通过NETCONF协议控制设备之间VXLAN隧道的建立。通过OpenFlow协议控制报文在设备间的转发

 

【参考】

1. https://www.cnblogs.com/hbgzy/p/5279269.html

2. https://blog.csdn.net/qq_38265137/article/details/80503588

3.https://wenku.baidu.com/view/332fc66fabea998fcc22bcd126fff705cd175c11.html?rec_flag=default&sxts=1581134777343

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!