2.3.2 网络虚拟化
网络虚拟化技术是伴随着服务器虚拟化技术不断发展的,网络虚拟化重点解决了以下问题:
● 虚拟机虚拟网卡如何实现,以及它如何与外界物理网络设备进行交互。毕竟ECS实际上是一台虚拟机,不可能每台虚拟机都对应一块真正的物理网卡。
● 随着数据中心规模的不断扩大,传统二层组网方式逐渐暴露出一些技术短板,诸如VLAN标签域存在数量上限4096、核心交换机MAC/ARP表项过大引发性能损耗、虚拟机跨三层网络无法热迁移等问题,严重阻碍了云数据中心规模发展。引入网络虚拟化技术,在基础网络上构建租户专有网络并构建大二层网络,是解决上述问题的一个有效方法。
如图2-26所示,我们可以参考计算虚拟化、Overlay的一些技术演进来了解网络虚拟化。网络虚拟化本质上是一个对虚拟机原始指令和报文进行封装/解封装的过程,让物理机系统能承载虚拟机系统,基础网络能承载虚拟网络。那么,虚拟机管理器(VMM)如何截获虚拟机网络I/O指令,翻译成物理机内核协议栈的I/O指令下发至网卡驱动?Overlay技术如何基于传统IP协议完成封装、交互和解封装,从而使得虚拟机能跨局域网甚至数据中心进行互访和迁移?这些问题通过网络虚拟化技术均可以得到完美解决。
图2-26 常见的虚拟化场景
下面将介绍三种网络虚拟化技术:网卡虚拟化、虚拟交换技术和最常见的Overlay技术——VXLAN。
1.网卡虚拟化
SR-IOV(Single Root I/O Virtualization)是基于网卡的虚拟化解决方案,可提升性能和可伸缩性。SR-IOV标准允许在虚拟机之间高效共享PCIe设备,并且在硬件中实现以获得与服务器几乎一样的性能。一个SR-IOV设备具有一个或多个PF(物理功能),PF是标准的PCIe设备(比如网卡)。每个PF都可以创建多个VF(虚拟功能),VF是“轻量级”的PCIe设备,每个VF都拥有独立的收发数据包的关键资源,如收发队列、DMA通道等,并且与其他VF共享其他非关键的设备资源。把一个VF分配给一台虚拟机,该虚拟设备就具备了直接使用该VF进行数据发送和接收的能力,并且可以直接进行I/O操作。
2.虚拟交换技术
虚拟机虚拟网卡是网络虚拟化的前端,其如何与物理网络设备进行交互,以及如何与其他虚拟机进行交互是实现虚拟化网络的关键。业界通用的实现方案是在物理服务器上部署一套虚拟交换机(vSwitch)作为虚拟机和物理网络的中继设备,提供基础二层转发能力和部分高级特性。
虚拟交换机有大家熟知的VMware ESXi vSwitch、开源的OpenvSwitch和Linux Bridge,以及阿里云自研的第一代和第二代虚拟交换机AVS。下面重点介绍业界比较流行的开源虚拟交换机:OpenvSwitch(OVS)。
(1)OpenvSwitch
OpenvSwitch是一个虚拟交换机软件,支持Xen/XenServer、KVM以及VirtualBox多种虚拟化技术,也支持802.1Q、网卡绑定、NetFlow/sFlow、GRE和VXLAN隧道等功能。
OpenvSwitch主要组件有datapath、vswitchd和ovsdb,其中datapath是负责数据交换的内核模块,它负责从网口读取数据,并快速匹配FlowTable中的流表项,如果匹配成功,则直接转发,否则上交vswitchd处理,它在初始化和端口绑定时注册钩子函数,把端口的报文处理接管到内核模块中;vswitchd是一个守护进程,它是OVS的管理和控制服务,通过UNIX Socket将配置信息保存到ovsdb中,并通过NetLink和内核模块交互;ovsdb则是OVS的数据库,其中保存了OVS配置信息。
如图2-27所示,OpenvSwitch数据包转发流程如下:
①设置标准以太网接口模式为混杂模式,从以太网接口中截获数据包,提取出关键字段。如果能够匹配流表,则转入⑦,否则转入②。
②通过调用upcall函数,使用NetLink协议封装数据包并上传到用户空间。在vswitchd模块中对NetLink消息解封装后,在ovsdb中进行查表匹配,如果能够匹配流表,则转入④,否则转入③。
③通过OpenFlow协议与控制器通信,控制器下发流表项,vswitchd模块通过解析流表项得到相应的动作,同时将流表项存储到ovsdb中。
④将匹配的流表项组织成内核FlowTable中的表项结构,并通过NetLink协议将流表项下发至内核的FlowTable中。
⑤通过调用reinject函数,使用NetLink协议封装数据包,重新发回至内核中。
⑥重新通过datapath模块进行流表项查找匹配。
⑦根据查找结果,指导数据包的转发。
图2-27 OpenvSwitch数据包转发流程
如图2-28所示,OpenvSwitch可以建立网桥,将物理网卡和虚拟机TAP设备进行桥接,像交换机一样进行二层转发,为虚拟机和网络设备建立桥梁。虚拟机之间在学习到对方的ARP信息后,可以正常通过OVS和物理交换机进行数据转发。
(2)虚拟交换机演进
早期的虚拟交换机大多为纯软件实现,与Hypervisor软件混合部署,为虚拟机提供基础转发功能,满足了早期发展需求。但是随着业务规模的扩大,以及用户需求的差异化,其缺点也凸显出来。
● 资源成本:vSwitch运行在宿主机上,需要独占CPU以及使用部分内存存取转发状态和相关配置,这就导致宿主机可售卖的CPU和内存资源变少,造成了一定程度上的资源浪费。
● 虚拟化开销:无论虚拟机接收还是发送报文,都需要CPU执行memcpy的内存拷贝操作,而CPU的内存拷贝“开销”是非常大的,特别是在大带宽场景下,严重制约了vSwitch的转发性能。
● 流量无法隔离:虚拟机的流量和宿主机本身的流量(如存储流量)会互相争抢,因为大家走的都是内核网络协议栈的收发流程。当存储流量大时,必然会影响到虚拟机自身的网络流量转发。
图2-28 OpenvSwitch网桥
由于纯软件虚拟交换机无法摆脱性能的限制,也使得最近几年业界开始聚焦在智能网卡(SmartNIC)上。通过将vSwitch的部分功能或全部功能卸载转移到网卡上,利用网卡CPU或者网卡硬件转发来提高网络性能。例如,OpenvSwitch通过Linux TC(Traffic Control)Flower模块可以将datapath下沉到物理网卡,提升云了转发效率;阿里云虚拟交换机基于软硬件一体化方式,使用神龙MOC卡实现快速转发,转发性能提升数倍,达到千万PPS,如图2-29所示。
图2-29 阿里云自研的AVS演进
3.VXLAN技术
(1)背景
介绍完虚拟网卡和虚拟交换技术,大家了解了虚拟机虚拟网卡和宿主机、虚拟交换机、网络设备交互的流程,同时我们也需要更多地思考在数据中心层面如何承载更多的虚拟机业务。传统数据中心内部二层网络多采用VLAN技术进行租户和业务隔离,但随着业务的发展,VLAN 4096个VLANID规模已无法满足大规模云计算中心业务及应用组网的需求,不断扩展的虚拟机规模容易使TOR交换机的MAC/ARP表项面临溢出的问题,同时难以实现跨三层的虚拟机二层互通及迁移场景。
而云计算业务发展对数据中心网络的需求是:
● 允许应用在任意(拥有空闲计算资源的)服务器上灵活部署而不受物理网络的限制,提升业务的敏捷性。支持包括站点灾难恢复、业务迁移在内的场景。
● 跨集群甚至跨多个计算中心的可迁移性。
● 按需进行虚拟网络部署,而无须重新配置物理网络;支持多租户环境下的大规模网络部署。
考虑到采用传统VLAN技术部署应用存在的局限性,以及VXLAN技术相关特性,根据云计算背景下数据中心内部二层组网需求,业界引入VXLAN技术在数据中心及城域网等场景下进行部署,试图从拓展二层子网数量、满足多数据中心场景等维度实现大规模虚拟机部署,同时VXLAN作为OverLay隧道技术配合其他DCI技术(如EVPN等)能够灵活实现跨三层的二层扩展,充分满足云业务对网络承载的需求。
(2)介绍
VXLAN(虚拟可扩展局域网)是一种Overlay网络技术,将二层数据帧封装至UDP报文进行转发,可以跨三层网络创建一个完全虚拟化的基础二层云网络,内层的虚拟机可以跨三层物理网络访问其他虚拟机。目前洛神平台的VPC基础隧道技术就是基于VXLAN演化而来的,VXLAN技术也是目前业界最流行的云网络Overlay技术。
(3)VXLAN报文解析
VXLAN在内层原始以太帧基础上加了8字节的VXLAN头,外层分别是UDP头、IP头、MAC头,共50字节的封装报文头,如图2-30所示(具体字段及属性参数可参见RFC 7348)。
图2-30 VXLAN报文组成示意图
(4)VXLAN实现原理
a.VXLAN基本概念
在VXLAN技术实现中,涉及的基本概念有VNI(VXLAN Network Identifier)、VTEP(VXLAN Tunnel End Point)、VXLAN Segment、VXLAN Gateway等。
● VNI作为VXLAN标识,主要用于标识不同的VXLAN域。
● VTEP可由支持VXLAN的硬件设备或软件来实现,其主要负责对VXLAN报文进行封装/解封装,包括ARP请求报文和正常的VXLAN数据报文,在一端封装报文后通过隧道向另一端VTEP发送封装的报文,另一端VTEP接收到封装的报文并解封装后根据封装的MAC地址进行转发。所有VM(虚拟机)加入VXLAN实际上是通过VTEP加入一个VXLAN关联组播组的方式来实现的:每个VTEP上都会维护一张表,记录属于同一个VXLAN域内VM的MAC地址,以及其所属主机的VTEP的IP地址。
● VXLAN Segment表示实现VM之间通信的VXLAN二层Overlay网络,在这个网络内VM可以互相通信并实现灵活迁移。
● VXLAN Gateway一般被放置在应用场景的边界,对内终结VXLAN,对外通过DCI相关技术如EVPN等实现跨数据中心、跨地理区域的大二层及以上网络互通。
b.VXLAN控制平面和数据平面
VXLAN控制平面(VNI、内层MAC、外层VTEP_IP)主要通过映射表的方式实现。对于不认识的MAC地址,VXLAN依靠ARP协议及组播交互的方式来获取路径信息,同时VXLAN还有自学习功能,当VTEP接收到一个UDP数据包后,会检查自己是否收到过这台虚拟机的数据,如果没有收到过,VTEP就会记录源VNI、源外层IP地址、源内层MAC地址的对应关系,避免组播学习。
在数据中心内部有控制器部署的场景下,可由控制器负责所有映射表的收集汇总并提供给各节点通过单播查询获取映射关系。
VXLAN采用UDP封装报文在VTEP之间构建了基于隧道的数据平面,VTEP可以为物理实体或逻辑实体,实现数据报文跨三层甚至跨数据中心的转发,但需注意转发途经的网络设备MTU值的调高,保证相应的VXLAN数据包顺利通过。VXLAN利用IP多播封装广播报文和多播报文,可以限制虚拟网络的广播域,从而控制广播泛洪;可以对不同的数据流使用不同的UDP源端口实现ECMP(等价多路径负载均衡)。
c.VXLAN发现和地址学习过程
如图2-31所示,在VXLAN网络模式下,主机之间的转发过程如下:
①VM-A(MAC-A、IP-1)和VM-B(MAC-B、IP-2)通过VTEP连接到VXLAN网络(VNI 10),两个VXLAN主机加入IP多播组239.1.1.1;VM-A以广播的形式发送ARP请求。
②VTEP-1封装报文,打上VXLAN标识为10,外层IP头DA为IP多播组(239.1.1.1),SA为IP_VTEP-1;VTEP-1在多播组内进行多播。
③VTEP-2/VTEP-3分别解析接收到的多播报文,填写映射表(内层MAC地址、VNI、外层IP地址),同时相应的VM对接收到的VM-A ARP请求进行判断处理。
④VM-B发现该请求是发给它的,于是发出ARP响应报文。
⑤VTEP-2接收到VM-B的响应报文后,把它封装在IP单播报文中(VXLAN标识为10),然后向VM-A发送单播报文。
⑥VTEP-1接收到单播报文后,学习内层MAC地址到外层IP地址的映射,解封装并根据被封装内容的目的MAC地址转发给VM-A。
⑦VM-A接收到VM-B ARP应答报文,ARP交互结束。
VXLAN单播数据流转发过程如图2-32所示。
图2-31 VXLAN发现和地址学习过程
图2-32 VXLAN单播数据流转发过程
按照ARP协议完成协商应答后,VTEP-1和VTEP-2上都会形成一个VXLAN二层转发表,大致如表2-1和表2-2所示(不同厂商的表项可能略有不同,但最主要的是其中的元素)。
表2-1 VTEP-1 VXLAN二层转发表
表2-2 VTEP-2 VXLAN二层转发表
单播数据流转发过程如下:
①VM-A将原始报文上送到VTEP。
②根据目的MAC地址和VNI,查找到外层的目的IP地址是VTEP-2 IP地址,然后将外层的源IP地址和目的IP地址分别封装为VTEP-1 IP地址和VTEP-2 IP地址,源MAC地址和目的MAC地址分别为下一段链路的源MAC地址和目的MAC地址。
③数据包穿越IP网络。
④根据VNI、外层的源IP地址和目的IP地址进行解封装,通过VNI和目的MAC地址查表,得到目的端口是e1/1。
⑤VM-B接受此原始报文,并回复VM-A,回复过程同上。
通过VXLAN技术,虚拟化平台可以跨三层网络甚至跨数据中心建立,虚拟机之间通过大二层进行互访。同时基于VXLAN技术和虚拟交换技术、SDN技术的结合,也提供了大规模租户网络隔离方案、可行的虚拟机热迁移方案、ARP代理和单播方案,为大规模云计算中心构建打下了基础。