《重识云原生系列》专题索引:
- 第一章——不谋全局不足以谋一域
- 第二章计算第1节——计算虚拟化技术总述
- 第三章云存储第1节——分布式云存储总述
- 第四章云网络第一节——云网络技术发展简述
- 第四章云网络4.2节——相关基础知识准备
- 第四章云网络4.3节——重要网络协议
- 第四章云网络4.3.1节——路由技术简述
- 第四章云网络4.3.2节——VLAN技术
- 第四章云网络4.3.3节——RIP协议
- 第四章云网络4.3.4节——OSPF协议
- 第四章云网络4.3.5节——EIGRP协议
- 第四章云网络4.3.6节——IS-IS协议
- 第四章云网络4.3.7节——BGP协议
- 第四章云网络4.3.7.2节——BGP协议概述
- 第四章云网络4.3.7.3节——BGP协议实现原理
- 第四章云网络4.3.7.4节——高级特性
- 第四章云网络4.3.7.5节——实操
- 第四章云网络4.3.7.6节——MP-BGP协议
- 第四章云网络4.3.8节——策略路由
- 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
- 第四章云网络4.3.10节——VXLAN技术
- 第四章云网络4.3.10.2节——VXLAN Overlay网络方案设计
- 第四章云网络4.3.10.3节——VXLAN隧道机制
- 第四章云网络4.3.10.4节——VXLAN报文转发过程
- 第四章云网络4.3.10.5节——VXlan组网架构
- 第四章云网络4.3.10.6节——VXLAN应用部署方案
- 第四章云网络4.4节——Spine-Leaf网络架构
- 第四章云网络4.5节——大二层网络
- 第四章云网络4.6节——Underlay 和 Overlay概念
- 第四章云网络4.7.1节——网络虚拟化与卸载加速技术的演进简述
1 引言
近几年,软件定义网络(Software Define Network,SDN)技术的发展与成熟,使得网络虚拟化可以不再基于物理网络设备实现,大大扩展了网络虚拟化的“边界”。需要强调的是,SDN 不等于网络虚拟化,只是SDN 这种技术非常适合实现网络虚拟化。
2 主流网络虚拟化技术概览
笔者将介绍业界目前几种成熟的网络虚拟化技术,分别是网络设备虚拟化、链路虚拟化和虚拟网络,并探讨业界最新出现的基于SDN 技术的网络虚拟化技术,以及网络虚拟化对数据中心的影响。
2.1 网络设备虚拟化
2.1.1 网卡虚拟化
网卡虚拟化(NIC Virtualization)包括软件网卡虚拟化和硬件网卡虚拟化。
(1)软件网卡虚拟化主要通过软件控制各个虚拟机共享同一块物理网卡实现。软件虚拟出来的网卡可以有单独的MAC 地址、IP 地址。网卡虚拟化的结构如图1所示。所有虚拟机的虚拟网卡通过虚拟交换机以及物理网卡连接至物理交换机。虚拟交换机负责将虚拟机上的数据报文从物理网口转发出去。根据需要,虚拟交换机还可以支持安全控制等功能。
虚拟网卡包括e1000,virtio等实现技术。virtio是目前最为通用的技术框架。virtio提供了虚拟机和物理服务器数据交换的通用机制,得到了大多数hypervisor的支持,成为事实上的标准。
- virtio是一种半虚拟化的解决方案。半虚拟化方案中,Guest OS知道自己是虚拟机,通过前端驱动和后端模拟设备互相配合实现IO虚拟化。这种方式与全虚拟化相比,可以大幅度提高虚拟机的IO性能。
- virtio的内核态卸载方案,最初的virtio的通信机制中,guest与用户空间的hypervisor通信,会有多次数据拷贝和CPU特权级的切换。Guest发包给外网络,guest要切换到内核的KVM,然后KVM通知用户空间的QEMU处理guest请求。这种方式通信效率不高。在virtio的后续演进中出现了vhost-net。
- Vhost-net是virtio的一种后端实现方案。Vhost-net实现在内核中,是内核的一个模块vhost-net.ko。Vhost与guest直接通信,旁路了KVM和QEMU。Guest和host kernel之间的数据通道通过virtqueue进行,QEMU不参与数据通道,主要负责virtio控制平面。
- Vhost与virtio前端的通信通过事件驱动机制来实现。Vhost初始化后会启动一个工作线程监听enventfd,当guest发出kick event后,kvm.ko触发ioeventfd到vhost,vhost通过virtqueue的available ring 获取数据,并设置used ring。当vhost工作线程向guest通信时触发回调call envent,通过kvm.ko触发irqfd通知guest。
- 在单次收发的过程中,数据通道减少了两次用户态与内核态的上下文切换过程。实现了数据通道在内核态的卸载。Vhost-net作为virtio的backend,与虚拟机内部的virtio NIC通过共享内存方式通信。
图2:virtio的内核态卸载
- virtio的DPDK卸载方案,基于vhost协议,DPDK设计了一套新的用户态协议——vhost-user。该协议将网络包处理(数据平面)卸载到DPDK应用中。控制平面仍然由QEMU来配置Vhost-user。DPDK优化实现了处理器的亲和性、巨页的使用、轮询模式驱动等。
- virtio的半硬件卸载方案,virtio设备虚拟化的功能一直都是由软件来实现,在Host上因虚拟化而产生的额外开销无法避免。为了提升云端服务的性能,可以将virtio功能offload,将与业务无关的任务绕开系统、CPU直接交给专用硬件执行。
- vDPA(硬件) 是virtio的半硬件虚拟化实现。该框架由Redhat提出,实现了virtio数据平面的硬件卸载。控制平面仍然采用原来的控制平面协议,当控制信息被传递到硬件中,硬件完成数据平面的配置之后,数据通信过程由硬件设备(智能网卡)完成,虚拟机与网卡之间直通。中断信息也由网卡直接发送至虚拟机不需要主机的干预。这种方式,控制面比较复杂,硬件难以实现。
- 在硬件vDPA架构中,通过OVS转发的流量首包依然由主机上的OVS转发平面处理,对应数据流的后续报文由硬件网卡直接转发。
- 在性能方面能够接近SR-IOV设备直通的数据平面。同时,能够保持virtio标准接口,保持云服务的兼容性。
图3:virtio的半硬件卸载
- virtio的DPU卸载方案,越来越多的硬件厂商开始原生支持virtio协议,将虚拟化功能Offload到硬件上,把嵌入式CPU集成到SmartNIC中,网卡处理所有网络中的数据,而嵌入式CPU控制路径的初始化并处理异常情况。这种具有Offload的SmartNIC则称为DPU,专门处理数据中心内的各种计算机和存储之间的数据移动和处理。
- NVIDIA加速交换和数据包处理技术ASAP2实现了SR-IOV与virtio的融合。virtio-net网卡由DPU上服务virtio-net-controller模拟。
- ASAP2的核心是eSwitch。eSwitch是嵌入式交换ASIC,可以提供裸金属服务器网络性能和效率,同时能够提供SD灵活性。DPU通过eSwitch在硬件中完成大部分数据包处理操作,释放主机CPU,提供更高的网络吞吐量。eSwitch处理所有进出服务器的流量,同时也处理VM或容器之间的流量。
(2)硬件网卡虚拟化主要用到的技术是单根I/O 虚拟化(Single Root I/O Virtulization,SR-IOV)。所有针对虚拟化服务器的技术都是通过软件模拟虚拟化网卡的一个端口,以满足虚拟机的I/O 需求,因此在虚拟化环境中,软件性能很容易成为I/O 性能的瓶颈。SR-IOV是一项不需要软件模拟就可以共享I/O 设备、I/O 端口的物理功能的技术。SR-IOV 创造了一系列I/O 设备物理端口的虚拟功能(Virtual Function,VF),每个VF都被直接分配到一个虚拟机。SR-IOV 将PCI 功能分配到多个虚拟接口以便在虚拟化环境中共享一个PCI设备的资源。SR-IOV 能够让网络传输绕过软件模拟层,直接分配到虚拟机,这样就降低了软件模拟层中的I/O开销。
2.1.2 硬件设备虚拟化
硬件设备虚拟化主要有两个方向:在传统的基于x86 架构机器上安装特定操作系统,实现路由器的功能,以及传统网络设备硬件虚拟化。
通常,网络设备的操作系统软件会根据不同的硬件进行定制化开发,以便设备能以最高的速度工作,比如思科公司的IOS 操作系统,在不同的硬件平台需使用不同的软件版本。近年来,为了提供低成本的网络解决方案,一些公司提出了网络操作系统和硬件分离的思路。
典型的网络操作系统是Mikrotik 公司开发的RouterOS。这些网络操作系统通常基于Linux 内核开发,可以安装在标准的x86 架构的机器上,使得计算机可以虚拟成路由器使用,并适当扩展了一些防火墙、v*n 的功能。此类设备以其低廉的价格以及不受硬件平台约束等特性,占据了不少低端路由器市场。
传统网络设备硬件(路由器和交换机)的路由功能是根据路由表转发数据报文。在很多时候,一张路由表已经不能满足需求,因此一些路由器可以利用虚拟路由转发(Virtual Routing and Forwarding,VRF)技术,将路由信息库(Forwarding Information Base,FIB)虚拟化成多个路由转发表。
此外,为增加大型设备的端口利用率,减少设备投入,还可以将一台物理设备虚拟化成多台虚拟设备,每台虚拟设备仅维护自身的路由转发表。比如思科的N7K 系列交换机可以虚拟化成多台VDC。所有VDC共享物理机箱的计算资源,但各自独立工作,互不影响。此外,为了便于维护、管理和控制,将多台物理设备虚拟化成一台虚拟设备也有一定的市场,比如H3C公司的IRF技术。
2.2 链路虚拟化
链路虚拟化是日常使用最多的网络虚拟化技术之一。常见的链路虚拟化技术有链路聚合和隧道协议。这些虚拟化技术增强了网络的可靠性与便利性。
2.2.1 链路聚合
链路聚合(Port Channel)是最常见的二层虚拟化技术。链路聚合将多个物理端口捆绑在一起,虚拟成为一个逻辑端口。当交换机检测到其中一个物理端口链路发生故障时,就停止在此端口上发送报文,根据负载分担策略在余下的物理链路中选择报文发送的端口。链路聚合可以增加链路带宽、实现链路层的高可用性。
在网络拓扑设计中,要实现网络的冗余,一般都会使用双链路上连的方式。而这种方式明显存在一个环路,因此在生成树计算完成后,就会有一条链路处于block状态,所以这种方式并不会增加网络带宽。如果想用链路聚合方式来做双链路上连到两台不同的设备,而传统的链路聚合功能不支持跨设备的聚合,在这种背景下出现了虚链路聚合(Virtual Port Channel,VPC)的技术。VPC 很好地解决了传统聚合端口不能跨设备的问题,既保障了网络冗余又增加了网络可用带宽。
2.2.2 隧道协议
隧道协议(Tunneling Protocol)指一种技术/协议的两个或多个子网穿过另一种技术/协议的网络实现互联。使用隧道传递的数据可以是不同协议的数据帧或包。隧道协议将其他协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过网络传递被封装的负载数据。隧道可以将数据流强制送到特定的地址,并隐藏中间节点的网络地址,还可根据需要,提供对数据加密的功能。一些典型的使用到隧道的协议包括Generic Routing Encapsulation(GRE)和 Internet Protocol Security(IPsec)。
2.3 虚拟网络
虚拟网络(Virtual Network)是由虚拟链路组成的网络。虚拟网络节点之间的连接并不使用物理线缆连接,而是依靠特定的虚拟化链路相连。典型的虚拟网络包括层叠网络、v*n 网络以及在数据中心使用较多的虚拟二层延伸网络。
2.3.1 层叠网络
层叠网络(Overlay Network)简单说来就是在现有网络的基础上搭建另外一种网络。层叠网络允许对没有IP 地址标识的目的主机路由信息,例如分布式哈希表(Distributed Hash Table,DHT)可以路由信息到特定的结点,而这个结点的IP 地址事先并不知道。层叠网络可以充分利用现有资源,在不增加成本的前提下,提供更多的服务。比如ADSL Internet 接入线路就是基于已经存在的PSTN 网络实现。
2.3.2 虚拟专用网
虚拟专用网(Virtual Private Network,v*n)是一种常用于连接中、大型企业或团体与团体间的私人网络的通信方法。虚拟专用网通过公用的网络架构(比如互联网)来传送内联网的信息。利用已加密的隧道协议来达到保密、终端认证、信息准确性等安全效果。这种技术可以在不安全的网络上传送可靠的、安全的信息。需要注意的是,加密信息与否是可以控制的。没有加密的信息依然有被窃取的危险。
2.3.3 虚拟二层延伸网络
虚拟化从根本上改变了数据中心网络架构的需求。虚拟化引入了虚拟机动态迁移技术,要求网络支持大范围的二层域。一般情况下,多数据中心之间的连接是通过三层路由连通的。而要实现通过三层网络连接的两个二层网络互通,就要使用到虚拟二层延伸网络(VirtualL2 Extended Network)。
传统的VPLS(MPLS L2v*n)技术,以及新兴的Cisco OTV、H3C EVI 技术,都是借助隧道的方式,将二层数据报文封装在三层报文中,跨越中间的三层网络,实现两地二层数据的互通。也有虚拟化软件厂商提出了软件的虚拟二层延伸网络解决方案。例如VXLAN、NVGRE,在虚拟化层的vSwitch 中将二层数据封装在UDP、GRE 报文中,在物理网络拓扑上构建一层虚拟化网络层,从而摆脱对底层网络的限制。
2.4 基于SDN的网络虚拟化
SDN 改变了传统网络架构的控制模式, 将网络分为控制层(Control Plane)和数据层(Data Plane)。网络的管理权限交给了控制层的控制器软件, 通过OpenFlow 传输通道,统一下达命令给数据层设备。数据层设备仅依靠控制层的命令转发数据包。由于SDN的开放性,第三方也可以开发相应的应用置于控制层内,使得网络资源的调配更加灵活。网管人员只需通过控制器下达命令至数据层设备即可,无需一一登录设备,节省了人力成本,提高了效率。可以说,SDN 技术极大地推动了网络虚拟化的发展进程。
SDN 有三种主流实现方式,分别是OpenFlow 组织主导的开源软件(包括Google,IBM,Citrix 等公司支持),思科主导的应用中心基础设施(Application CentricInfrastructure,ACI),以及VMware 主导的NSX。
2.4.1 OpenFlow
OpenFlow 的核心是将原本完全由交换机/路由器控制的数据包转发,转化为由支持OpenFlow 特性的交换机和控制服务器分别完成的独立过程。OpenFlow 交换机是整个OpenFlow 网络的核心部件,主要管理数据层的转发。OpenFlow 交换机至少由三部分组成:流转发表(Flow Table),告诉交换机如何处理流;安全通道(Secure Channel),连接交换机和控制器;OpenFlow协议,一个公开的、标准的供OpenFlow 交换机和控制器通信的协议。OpenFlow 交换机接收到数据包后,首先在本地的流表上查找转发目标端口,如果没有匹配,则把数据包转发给Controller,由控制层决定转发端口。OpenFlow 架构如图4 所示。
2.4.2 思科ACI
ACI 可以根据应用需求来确定如何应用网络策略和逻辑拓扑。和使用公开的OpenFlow 协议产品不同,思科ACI 由应用策略基础设施控制器(Application PolicyInfrastructure Controller,APIC) 和Nexus 9000 系列产品组合而成。APIC 为自动化管理、策略制定和监控状态提供了一个统一平台。APIC 是一个高度可扩展的集群软件控制器。与传统SDN 控制器不同的地方在于APIC和数据层以及控制层是完全独立的。因此即使APIC 离线,网络也能够对终端变化做出响应。
2.4.3 VMware NSX
NSX 是VMware 软件定义数据中心的一部分。NSX与其他SDN 产品最大的不同在于完全是由软件模拟实现硬件功能。依托VMware 的ESXi 虚拟化操作系统,NSX 可以虚拟化网络设备第二层至第七层的功能(包括路由、防火墙、负载均衡、v*n、QoS 等)。对用户来说,NSX 提供了一整套逻辑的、虚拟的、简化的网络环境和配置方法,完全不需理会底层的通信过程和数据中心的各种硬件网络设备的设置。NSX 架构如图5 所示。
2.5 网络虚拟化对数据中心的影响
网络虚拟化的具体实现会改变目前网络的架构以及网络维护流程。网络虚拟化可以使网络设计、维护简单化以及网络结构扁平化;快速进行网络部署、变更的操作,即可快速根据业务需求重新部署网络结构或进行网络策略的变更;开放性增加,基于OpenFlow 的SDN 协议是公开的,网络设备可以有更多的选择。
当前,数据中心的网络虚拟化仍处在起步阶段,网络运维还需要较高的人工成本。基于SDN 技术的网络虚拟化将在数据中心发挥重要的作用。并且随着服务器、存储、网络等硬件资源全面虚拟化, 标志着软件定义数据中心(Soft ware Define Data Center,SDDC)得以实现。
SDDC 通过底层硬件架构上加载的一个虚拟基础架构层,提供了数据中心应用程序所需的运行环境,并能管理存储、服务器、交换机和路由器等多种设备。SDDC 使数据中心由传统的以架构为中心改为以应用/业务为中心。SDDN 使得硬件平台及其相应的操作对上层应用完全透明。管理人员只需定义应用所需的资源(包括计算、存储、网络)和可用性要求,SDDC 可从硬件资源中提取出“逻辑资源”,供应用使用。未来,SDDC的发展将改变传统云计算的概念,提高数据中心的健壮性、运营效率以及资源利用率。
参考链接
详解:网络虚拟化卸载加速技术的演进 - 云 社区 - 腾讯云
网络虚拟化技术发展及未来影响 - 程序员大本营
DPU和CPU互联的接口之争:Virtio还是SR-IOV? - 极术社区 - 连接开发者与智能计算生态
NVIDIA ASAP² 技术保护并加速现代数据中心应用 - 知乎
Virtio网络的演化之路 - 云 社区 - 腾讯云
virtio 简介 - bakari - 博客园
NVIDIA 白皮书《Comparision of OVS vRouter Acceleration Techniques:SR-IOV vs. Virtio》