《云数据中心网络与SDN:技术架构与实现》——1.12 端到端的二层——NVo3的崛起
1.12 端到端的二层——NVo3的崛起
跨设备链路聚合、二层多路径、DCI,这些技术都是出于传统网络厂商之手,并没有摆脱“以盒子为中心”的设计思路。云计算的普及使得IT软件厂商获得了更为强势的地位:一方面,他们开始主导云数据中心网络设计的话语权,希望能够使“网络黑盒”变得更加开放,以摆脱对传统网络厂商的依赖。
VMware作为服务器虚拟化领域的老大,开始围绕Overlay的思路来打造基于软件的数据中心网络虚拟化方案,在服务器内部的虚拟交换机上就开始起二层的隧道,利用通用的物理IP网络作为Underlay承载隧道的传输,从而得以摆脱开专用的数据中心硬件交换机,直接在服务器间打通“端到端”的大二层。
上述思路实现起来不仅灵活而且门槛较低,其代表性技术VxLAN在云数据中心迅速普及,直接推动IETF在2014年成立了NVo3(Network Virtualization over Layer 3)工作组。NVo3主要面向数据中心网络虚拟化的场景,基于IP作为L3 Underlay,在其上通过隧道构建Overlay,支撑大规模的租户网络。NVo3的技术模型如图1-34所示,PE设备称为NVE(Network Virtualization Element),VN Context作为Tag标识租户网络并在租户间进行隔离,P设备即为普通的IP路由器。NVo3在设计之初,VxLAN与SDN的联合部署已经成了云数据中心的大趋势,VxLAN作为数据平面解耦租户网络和物理网络,SDN将租户的控制能力集成到云平台中与计算、存储联合调度。因此NVo3的模型中专门画出了NVA(Network Virtualization Authority)作为NVE设备的控制器负责隧道建立、地址学习等控制逻辑。
图1-34 NVo3的技术模型
NVo3的思路主要来源于VxLAN,并汲取了NvGRE和STT中的一些优良特性,未来将以Geneve为集大成者。下面分别对VxLAN、NvGRE、STT和Geneve进行介绍。
1.12.1 VxLAN
VxLAN(Virtual eXtensible LAN,RFC 7348)最早是由VMware和Arista主导联合提出的一种大二层技术,突破了VLAN ID只有4k的限制,通过IP网络进行二层隧道流量的传输,并借助IP网络的ECMP特性获得了多路径的扩展性。VxLAN是一种MACinUDP的隧道,图1-35是标准VxLAN的封装格式。
图1-35 标准VxLAN的封装格式
标准VxLAN(指的是RFC 7348)封装的是以太网帧,外层的报头可以为IPv4,也可以为IPv6。UDP Src Port是外层UDP的源端口号,它的值通过对内层的帧进行哈希得到,可实现传输的ECMP。Dst Port为VxLAN从IANA申请的端口4789。UDP checksum如果不为0,出口VTEP(VxLAN的NVE)必须进行计算,计算结果必须与该字段一致才能进行解封装,不一致则进行丢弃,checksum如果为0,则出口VTEP无条件解封装。VNI是VxLAN中的租户标识,长度为24位,理论上能够支持1600万的租户。Payload是原始的Ethernet帧,由于外层VxLAN报头中VNI已经唯一地标识了租户,考虑到安全因素,Inner VLAN在进行封装时一般会被去掉。
NVo3技术中,NVE上的地址学习包括两类:第一类是学习本地VM的MAC与port的映射关系;第二类是学习远端VM的MAC地址与该VM所在NVE的IP地址的映射关系。标准VxLAN的单播通信流程如图1-36所示,组播过程与此类似,只不过外层的目的IP地址被封装为相应VNI的组播地址。
图1-36 标准VxLAN的单播通信流程
首先,VTEP通过IGMP加入VNI 1的组播组,VNI 1中的BUM流量都将通过该组播组传输。虚拟机A与B间通信的具体转发流程如下:VM A发送ARP请求,VTEP 1学习VM A的本地连接端口,然后将该ARP请求进行VxLAN封装(VNI标记为1),然后向VNI 1的组播组中进行组播。VTEP 2收到后,学习VNI 1中A的MAC地址与VTEP 1 的IP地址的映射关系,然后在本地进行泛洪。VMB收到该ARP请求后进行回复,由于VTEP 2已经完成了自学习,因此VTEP 2封装VxLAN后(VNI标记为1)将向VTEP 1进行单播,同时VTEP 2学习VM B的本地连接端口。同理,VTEP 1收到ARP回复后,在VN1 1中学习该VNI中MAC B与VTEP 2 IP地址的映射关系,然后再交给A。之后VMA和VMB间的数据流将通过单播在VETP 1和VTEP 2间传输。
标准VxLAN不允许VTEP接收IP分片,因此如果Ingress VTEP封装隧道后超过了物理网络的MTU就会被分片,Egress VTEP收到分片后很可能会直接丢弃,而VxLAN本身并没有MTU探测机制。因此,在使用VxLAN时要注意调整VM或物理网络中的MTU。
VxLAN通常用来在虚拟机间建立端到端的隧道,常常被部署在物理服务器的HyperVisor中,目前的vSwitch基本都提供了对VxLAN的支持。不过在Hypervisor中,VxLAN的封装会消耗很多的CPU,考虑到性能问题,很多生产环境会选择用硬件交换机来卸载VxLAN的封装,Hypervisor中的vSwitch只负责打VLAN上联硬件交换机。硬件的VxLAN交换机也被称为Hardware VTEP或者VxLAN L2 Gateway,主要的功能就是做VxLAN和VLAN间的转换,下联口既可以连接vSwitch做VxLAN卸载,也可以连接物理交换机实现VM与物理主机的互通。通常来说,一个VxLAN网络连接的主机都在一个子网中,如果租户需要多个子网可以对应到多个VxLAN网络,不同的VxLAN网络有不同的VNI。在这些子网间实现3层互通,依赖于VxLAN Routing,VxLAN L3 Gateway将终结源VM所在的VxLAN,路由后进入目的VM的VxLAN。
VxLAN核心的东西就这么多了,理解起来也并不复杂,就是通过隧道来模拟交换机间链路上的传输,转发的控制还是MAC自学习,需要泛洪的时候以组播进行模拟。可见,标准VxLAN的转发非常依赖于底层IP网络的组播(标准VxLAN并不支持头端复制的伪广播),这对设备和运维都提出了相当高的要求。
因此,基于标准VxLAN数据平面的封装格式,业界提出了一些对VxLAN控制平面的优化方案,比如通过分布式的MP-BGP主动地同步租户路由,或者通过集中式的SDN控制器(即图1-34中的NVA)对租户路由进行学习和分发,以减少VxLAN流量在IP网络上的组播。除了控制平面的优化外,目前也出现了一些对标准VxLAN数据封装的扩展,比如支持多协议payload的VxLAN-GPE(Generic Protocol Extension for VXLAN,draft-ietf-nvo3-vxlan-gpe),比如通过预留位实现策略控制的VxLAN-GBP(VXLAN Group Policy Option,draft-smith-vxlan-group-policy),还有一些厂商利用VxLAN预留位实现了服务链的功能。
- 点赞
- 收藏
- 关注作者
评论(0)