为了对数据中心网络虚拟化有个初步的认识,本文将对当前比较主流的几款商业平台进行介绍,包括VMware公司的网络虚拟化技术,IBM公司的Dove及开源的OpenDove平台, NEC公司的virtual-network-platform和VTN平台,以及Cisco公司的Nexus虚拟化平台。
1.Vmware公司的网络虚拟化技术
VMware在虚拟化领域的领导地位使得我们必须首先介绍一下他们的网络虚拟化技术NSX。然而需要说明的是,网络上有关NSX的技术资料(广告除外)并不多,因此在很多技术细节上我们也无能为力。我们首先关注到VMware公司云计算架构工程师Steve Flanders写的一篇技术博客[1],其主要内容是介绍VMware公司网络虚拟化技术的发展历史,相信这对于大家了解技术的发展有很大的帮助。然而这篇博客的问题在于几乎没有技术细节,从而使得读者对技术的理解不够深入。为了弥补这个缺陷,本文将在Steve文章的基础之上进行必要的扩充,尽量使得大家能够对VMware的网络虚拟化技术有更深刻的理解。VMware公司的网络虚拟化技术经历了vSwitch,VDS,vCNS,收购NVP,到最终演变为NSX。根据每种技术的不同侧重点,早期的vSwtich和VDS(虚拟交换机)是构建虚拟网络的基础,vCNS和NVP实际上是VMware和Nicira公司各自的虚拟网络平台,而NSX则是在收购Nicira之后VMware推出的统一平台并被寄予厚望。本节的后续部分将按照这种历史顺序进行介绍。
1.1.虚拟交换机
最初的虚拟化技术大多关注于主机端,从而实现对处理器、内存等物理资源的共享。随着虚拟化技术的发展,虚拟机之间以及虚拟机与外部如何通信的问题获得了更多的重视。为了解决这些问题,VMware首先推出了vSwitch技术。顾名思义,vSwitch就是一个虚拟交换机,其主要功能就是实现数据包的交换。换句话说,当网卡接收到数据包时,vSwitch将负责将数据包转发给正确的虚拟机。vSwitch可以简单的认为是一台交换机,因此当系统规模扩大后,如何实现对数万乃至数十万台vSwitch的高效管理成为一个必须解决的问题。
为此,VMware提出了vSwitch的替代方案,即VDS(vNetwork Distributed Switch)。简单来说,如果vSwitch是一个交换机,那么我们可以将VDS看作是一整套网络解决方案,包括交换机和管理系统。如图 1所示,VDS包括数据平面和管理平面。数据平面负责数据的转发和相关操作,而控制平面则负责制定数据平面的规则,这一点与SDN的思想是一致的。特别的是,VDS通过增加一个抽象层可以将整个网络抽象为一个聚合资源来处理。例如,我们可以将一个租户的虚拟机连接到一个虚拟分布式交换机上。从而,对该租户的所有网络配置都可以通过对这一台分布式交换机的配置来完成。假如一个租户有500台虚拟机,并且不幸的是这500台虚拟机分布在500台物理机上。那么,如果采用vSwitch方案,管理员需要分别配置500台虚拟交换机。然而使用VDS方案,这500台虚拟机交换机可以被一台虚拟的分布式交换机所取代,此时管理员只需要配置一台交换机就可以了,这对降低管理复杂度起到了非常重要的作用。另外,VDS为了方便管理员监控和调试网络,提供了对NetFlow和SNMP等传统手段的支持,这大大平滑了网络管理员的学习曲线。然而VDS也存在一些局限性,即VDS主要集中于底层的配置,例如VLAN,虚拟端口以及端口的流量策略等等。对于上层的网络应用,例如流量均衡和防火墙,则没有太多的支持。为了解决这个问题,VMware又推出了vCNS。
图1 VMware VDS架构图[2]
1.2 vCNS
vCNS(vCloud Network and Security),顾名思义其主要解决的是云环境中的网络和安全问题,其可提供的服务包括虚拟防火墙、VPN、负载均衡和基于VXLAN的虚拟网络扩展等等。如图 2所示,vCNS可以实现为不同的租户构建虚拟数据中心(VDC),并且不同的VDC可以采用完全定制化的网络和安全策略。简单来说,vCNS是由一个个虚拟装置(appliance)构成,例如虚拟防火墙、虚拟DNS服务器等等。为了实现VDC的定制化管理,管理员可以通过配置,实现网络负载流经不同的虚拟装置。在vCNS中存在两种基本的虚拟装置,边缘网关装置(Edge Gateway)和应用防火墙(App Firewall)。其中,边缘网关装置为进入和离开VDC的数据流建立一个网关,并且提供防火墙、IPsec VPN、NAT、静态路由、DHCP和DNS等服务;应用防火墙则直接为某个负载(workload),例如虚拟机,提供保护。vCNS提供两种虚拟装置类型,大大提高了系统配置的灵活性。例如,当只需要对某个负载进行保护时,应用防火墙可以快速的为这个负载建立起保护。此时,管理员并不需要关心数据来自哪里。当需要对某个虚拟域进行管理时,则可以使用虚拟边缘网管设备,从而对进出该域的数据进行管理,而对域内的数据流动不做任何限制。另外,vCNS还支持通过REST API接口来集成第三方的服务,因此具有较好的灵活性。如果大家对NFV的服务链比较了解就可以发现,vCNS实际上已经具备了构建NFV服务链的能力。
图2 VMware vCNS架构图[3]
1.3.NVP
上面的这些技术都是针对于VMware自身平台。实际上,最近几年OpenStack项目非常活跃。VMware显然对于这个巨大的市场也很感兴趣,因此斥资12亿美元收购了由Martin Casado、Nick McKeown和Scott Shenker联合创办的Nicira公司,而该公司的主要产品即是NVP(Network Virtualization Platform)。NVP的主要目的是实现“租户的工作负载无需经过修改就可以迁到多租户数据中心”的愿景。首先,NVP使用隧道技术,在服务器的hypervisor间建隧道,这样做有两个目的:一方面是为了加速虚拟机的迁移,包括实现从原企业网向云端的无缝迁移和数据中心内部不同子网之间自由迁移;另一方面,使用隧道技术亦有助于减少网络设备需维护的网络状态(如与虚拟机MAC、IP相关的信息)。其中,隧道的创建和管理由中央控制器集群——NVP控制集群(NVP Controller Cluster)负责。其次,NVP采用软件实现的虚拟交换机将虚拟机接入网络。NVP平台最终实现的效果是在物理网络上构建虚拟网络,且虚拟网络对物理网络透明,物理网络中设备所见到的不过是物理服务器之间普通的网络流量而已。
如图 3所示,NVP的架构包括两大部分:NVP控制集群和传输节点(Transport Nodes)。NVP控制器逻辑上可分为:OpenFlow控制器(OpenFlow Controller)和配置管理器(Configuration Manager)。
图3 NVP架构[6]
其中,OpenFlow控制器通过OpenFlow协议实现对虚拟交换机内数据转发的管理。由于NVP平台采用Open vSwitch作为虚拟交换机,因此与OpenFlow控制器进行通信的实际上是ovs-vswitchd(OVS守护进程),NVP与Open vSwitch间的交互如图4所示。配置管理器则通过OVSDB管理协议(Open vSwitch Database Management Protocol)来实现对数据库ovsdb的管理。Ovsdb主要用于存储虚拟网络的配置信息,例如虚拟机与hypervisor的对应关系和隧道等相关信息。传输节点包括三种类型:网关节点(Gateway Nodes)、服务节点(Service Nodes)和虚拟交换机。其中,网关节点指数据中心内虚拟网络与外界通信的连接点,可位于数据中心或远程的企业网中。服务节点是可选的,其主要用于为虚拟网络提供多播和广播服务。首先由需要进行多播和广播的主机将数据包发给服务节点,然后由服务节点进行复制并发给对应的目的主机。虚拟交换机(位于Hypervisor内)为虚拟机提供网络接入,并构成网络边缘层(Network Edge)。目前,NVP只控制网络边缘,而核心的物理网络则由专用的物理交换机构成。
图4 NVP与Open vSwitch交互图
NVP采用STT技术(Stateless Transport Tunneling Protocol,无状态传输隧道协议)来构建隧道。一般来说,选择隧道技术时,我们希望它的开销尽可能小。由于STT技术支持一些网卡加速技术(NIC offload),如CKO(Checksum Offloading)和TSO(TCP segmentation offloading),故而基于STT构建隧道一般具有较好的性能。基于NVP技术,建立虚拟网络包括以下三个步骤:
1)hypervisor和网关节点通过OVSDB管理协议为NVP控制集群提供虚拟网卡的位置信息,并当虚拟机发生迁移时更新这一信息。
2)服务提供商通过NVP API配置系统。NVP提供了面向OpenStack的北向接口,可由Openstack提供对网络的配置要求。当有新租户加入系统或已有租户的配置发生改变,或者系统底层的物理配置发生变化,均会触发步骤3)
3)控制器为OVS计算流表和数据库表项(比如数据库中和隧道相关的表项)。然后将计算所得的转发状态(即流表项和数据库表项)通过OpenFlow协议和OVSDB管理协议送到传输节点上。
为了简化上述过程,NVP提出一种新的计算模型,nlog。Nlog是一种声明式语言,因此用户只需告诉NVP要做什么(给出声明),而如何实现则完全由nlog自动完成。Nlog直观看来就是输入到输出的一个映射。输入为配置目标和位置信息,经过nlog计算后得到输出,即流表项和数据库表项。Nlog的声明实质是数据记录查询,每个查询就是对一些数据表的连接(join)操作,最终得到head表。Head表是nlog定义的一种特殊的表,它能将表项导出到nlog的运行时引擎中进行计算。nlog采用增量计算方式,即当参与连接操作的表发生变化时,会对受影响的部分所在的表重新做连接操作。
1.4.NSX
NSX的核心思想是将网络服务化。如图 5所示,如果把虚拟机看作是一个计算服务的容器,NSX创建的虚拟网络则是一个网络服务的容器。这些以软件形式存在的服务则可以是逻辑交换机、逻辑路由器和逻辑防火墙等等。为了构建一个虚拟网络,云管理平台(CMP)首先通过NSX控制提供的RESTful接口发出服务请求;接受到请求之后,NSX控制器将抽象的网络服务分解到相应的虚拟交换机上,并且这些服务(虚拟交换机)与负载(虚拟机)进行逻辑连接。为了与负载进行连接,虚拟网络与传统的物理网络工作原理是相同的,唯一的不同在于虚拟网络中的网络服务实际上是一个分布式软件模块的逻辑实例。这些实例可以直接运行在hypervisor中,从而可以降低实施服务的开销。
图5 NSX网络虚拟化示意图[4]
NSX可以认为是VMware收购Nicira之后将vCNS和NVP进行整合之后的产物,因此NSX具有vCNS和NVP的大部分功能。对于这些重复的内容,我们在这里就不再赘述了。相比较前面的产品而言,NSX一个显著的特点在于它的兼容性。NSX提供了一个可扩展的平台,基于这个平台可以运行任何应用、任何hypervisor、任何的网络基础设施以及任何的网络管理平台。对于用户来说,抽象出来的虚拟网络与物理网络没有什么不同,因此应用不需要为使用虚拟网络做任何修改。另外,NSX已经实现了对Xen、KVM和VMware ESXi等hypervisor,以及CloudStack、OpenStack和VMware vCloud Automation Center的完美支持。因此,NSX是一个开放的平台,并不会导致用户被锁定在VMware自身的平台上,而这一点一般是客户选购产品时非常关注的。