為了對(duì)數(shù)據(jù)中心網(wǎng)絡(luò)虛擬化有個(gè)初步的認(rèn)識(shí),本文將對(duì)當(dāng)前比較主流的幾款商業(yè)平臺(tái)進(jìn)行介紹,包括VMware公司的網(wǎng)絡(luò)虛擬化技術(shù),IBM公司的Dove及開(kāi)源的OpenDove平臺(tái), NEC公司的virtual-network-platform和VTN平臺(tái),以及Cisco公司的Nexus虛擬化平臺(tái)。
1.Vmware公司的網(wǎng)絡(luò)虛擬化技術(shù)
VMware在虛擬化領(lǐng)域的領(lǐng)導(dǎo)地位使得我們必須首先介紹一下他們的網(wǎng)絡(luò)虛擬化技術(shù)NSX。然而需要說(shuō)明的是,網(wǎng)絡(luò)上有關(guān)NSX的技術(shù)資料(廣告除外)并不多,因此在很多技術(shù)細(xì)節(jié)上我們也無(wú)能為力。我們首先關(guān)注到VMware公司云計(jì)算架構(gòu)工程師Steve Flanders寫的一篇技術(shù)博客[1],其主要內(nèi)容是介紹VMware公司網(wǎng)絡(luò)虛擬化技術(shù)的發(fā)展歷史,相信這對(duì)于大家了解技術(shù)的發(fā)展有很大的幫助。然而這篇博客的問(wèn)題在于幾乎沒(méi)有技術(shù)細(xì)節(jié),從而使得讀者對(duì)技術(shù)的理解不夠深入。為了彌補(bǔ)這個(gè)缺陷,本文將在Steve文章的基礎(chǔ)之上進(jìn)行必要的擴(kuò)充,盡量使得大家能夠?qū)Mware的網(wǎng)絡(luò)虛擬化技術(shù)有更深刻的理解。VMware公司的網(wǎng)絡(luò)虛擬化技術(shù)經(jīng)歷了vSwitch,VDS,vCNS,收購(gòu)NVP,到最終演變?yōu)镹SX。根據(jù)每種技術(shù)的不同側(cè)重點(diǎn),早期的vSwtich和VDS(虛擬交換機(jī))是構(gòu)建虛擬網(wǎng)絡(luò)的基礎(chǔ),vCNS和NVP實(shí)際上是VMware和Nicira公司各自的虛擬網(wǎng)絡(luò)平臺(tái),而NSX則是在收購(gòu)Nicira之后VMware推出的統(tǒng)一平臺(tái)并被寄予厚望。本節(jié)的后續(xù)部分將按照這種歷史順序進(jìn)行介紹。
1.1.虛擬交換機(jī)
最初的虛擬化技術(shù)大多關(guān)注于主機(jī)端,從而實(shí)現(xiàn)對(duì)處理器、內(nèi)存等物理資源的共享。隨著虛擬化技術(shù)的發(fā)展,虛擬機(jī)之間以及虛擬機(jī)與外部如何通信的問(wèn)題獲得了更多的重視。為了解決這些問(wèn)題,VMware首先推出了vSwitch技術(shù)。顧名思義,vSwitch就是一個(gè)虛擬交換機(jī),其主要功能就是實(shí)現(xiàn)數(shù)據(jù)包的交換。換句話說(shuō),當(dāng)網(wǎng)卡接收到數(shù)據(jù)包時(shí),vSwitch將負(fù)責(zé)將數(shù)據(jù)包轉(zhuǎn)發(fā)給正確的虛擬機(jī)。vSwitch可以簡(jiǎn)單的認(rèn)為是一臺(tái)交換機(jī),因此當(dāng)系統(tǒng)規(guī)模擴(kuò)大后,如何實(shí)現(xiàn)對(duì)數(shù)萬(wàn)乃至數(shù)十萬(wàn)臺(tái)vSwitch的高效管理成為一個(gè)必須解決的問(wèn)題。
為此,VMware提出了vSwitch的替代方案,即VDS(vNetwork Distributed Switch)。簡(jiǎn)單來(lái)說(shuō),如果vSwitch是一個(gè)交換機(jī),那么我們可以將VDS看作是一整套網(wǎng)絡(luò)解決方案,包括交換機(jī)和管理系統(tǒng)。如圖 1所示,VDS包括數(shù)據(jù)平面和管理平面。數(shù)據(jù)平面負(fù)責(zé)數(shù)據(jù)的轉(zhuǎn)發(fā)和相關(guān)操作,而控制平面則負(fù)責(zé)制定數(shù)據(jù)平面的規(guī)則,這一點(diǎn)與SDN的思想是一致的。特別的是,VDS通過(guò)增加一個(gè)抽象層可以將整個(gè)網(wǎng)絡(luò)抽象為一個(gè)聚合資源來(lái)處理。例如,我們可以將一個(gè)租戶的虛擬機(jī)連接到一個(gè)虛擬分布式交換機(jī)上。從而,對(duì)該租戶的所有網(wǎng)絡(luò)配置都可以通過(guò)對(duì)這一臺(tái)分布式交換機(jī)的配置來(lái)完成。假如一個(gè)租戶有500臺(tái)虛擬機(jī),并且不幸的是這500臺(tái)虛擬機(jī)分布在500臺(tái)物理機(jī)上。那么,如果采用vSwitch方案,管理員需要分別配置500臺(tái)虛擬交換機(jī)。然而使用VDS方案,這500臺(tái)虛擬機(jī)交換機(jī)可以被一臺(tái)虛擬的分布式交換機(jī)所取代,此時(shí)管理員只需要配置一臺(tái)交換機(jī)就可以了,這對(duì)降低管理復(fù)雜度起到了非常重要的作用。另外,VDS為了方便管理員監(jiān)控和調(diào)試網(wǎng)絡(luò),提供了對(duì)NetFlow和SNMP等傳統(tǒng)手段的支持,這大大平滑了網(wǎng)絡(luò)管理員的學(xué)習(xí)曲線。然而VDS也存在一些局限性,即VDS主要集中于底層的配置,例如VLAN,虛擬端口以及端口的流量策略等等。對(duì)于上層的網(wǎng)絡(luò)應(yīng)用,例如流量均衡和防火墻,則沒(méi)有太多的支持。為了解決這個(gè)問(wèn)題,VMware又推出了vCNS。
圖1 VMware VDS架構(gòu)圖[2]
1.2 vCNS
vCNS(vCloud Network and Security),顧名思義其主要解決的是云環(huán)境中的網(wǎng)絡(luò)和安全問(wèn)題,其可提供的服務(wù)包括虛擬防火墻、VPN、負(fù)載均衡和基于VXLAN的虛擬網(wǎng)絡(luò)擴(kuò)展等等。如圖 2所示,vCNS可以實(shí)現(xiàn)為不同的租戶構(gòu)建虛擬數(shù)據(jù)中心(VDC),并且不同的VDC可以采用完全定制化的網(wǎng)絡(luò)和安全策略。簡(jiǎn)單來(lái)說(shuō),vCNS是由一個(gè)個(gè)虛擬裝置(appliance)構(gòu)成,例如虛擬防火墻、虛擬DNS服務(wù)器等等。為了實(shí)現(xiàn)VDC的定制化管理,管理員可以通過(guò)配置,實(shí)現(xiàn)網(wǎng)絡(luò)負(fù)載流經(jīng)不同的虛擬裝置。在vCNS中存在兩種基本的虛擬裝置,邊緣網(wǎng)關(guān)裝置(Edge Gateway)和應(yīng)用防火墻(App Firewall)。其中,邊緣網(wǎng)關(guān)裝置為進(jìn)入和離開(kāi)VDC的數(shù)據(jù)流建立一個(gè)網(wǎng)關(guān),并且提供防火墻、IPsec VPN、NAT、靜態(tài)路由、DHCP和DNS等服務(wù);應(yīng)用防火墻則直接為某個(gè)負(fù)載(workload),例如虛擬機(jī),提供保護(hù)。vCNS提供兩種虛擬裝置類型,大大提高了系統(tǒng)配置的靈活性。例如,當(dāng)只需要對(duì)某個(gè)負(fù)載進(jìn)行保護(hù)時(shí),應(yīng)用防火墻可以快速的為這個(gè)負(fù)載建立起保護(hù)。此時(shí),管理員并不需要關(guān)心數(shù)據(jù)來(lái)自哪里。當(dāng)需要對(duì)某個(gè)虛擬域進(jìn)行管理時(shí),則可以使用虛擬邊緣網(wǎng)管設(shè)備,從而對(duì)進(jìn)出該域的數(shù)據(jù)進(jìn)行管理,而對(duì)域內(nèi)的數(shù)據(jù)流動(dòng)不做任何限制。另外,vCNS還支持通過(guò)REST API接口來(lái)集成第三方的服務(wù),因此具有較好的靈活性。如果大家對(duì)NFV的服務(wù)鏈比較了解就可以發(fā)現(xiàn),vCNS實(shí)際上已經(jīng)具備了構(gòu)建NFV服務(wù)鏈的能力。
圖2 VMware vCNS架構(gòu)圖[3]
1.3.NVP
上面的這些技術(shù)都是針對(duì)于VMware自身平臺(tái)。實(shí)際上,最近幾年OpenStack項(xiàng)目非常活躍。VMware顯然對(duì)于這個(gè)巨大的市場(chǎng)也很感興趣,因此斥資12億美元收購(gòu)了由Martin Casado、Nick McKeown和Scott Shenker聯(lián)合創(chuàng)辦的Nicira公司,而該公司的主要產(chǎn)品即是NVP(Network Virtualization Platform)。NVP的主要目的是實(shí)現(xiàn)“租戶的工作負(fù)載無(wú)需經(jīng)過(guò)修改就可以遷到多租戶數(shù)據(jù)中心”的愿景。首先,NVP使用隧道技術(shù),在服務(wù)器的hypervisor間建隧道,這樣做有兩個(gè)目的:一方面是為了加速虛擬機(jī)的遷移,包括實(shí)現(xiàn)從原企業(yè)網(wǎng)向云端的無(wú)縫遷移和數(shù)據(jù)中心內(nèi)部不同子網(wǎng)之間自由遷移;另一方面,使用隧道技術(shù)亦有助于減少網(wǎng)絡(luò)設(shè)備需維護(hù)的網(wǎng)絡(luò)狀態(tài)(如與虛擬機(jī)MAC、IP相關(guān)的信息)。其中,隧道的創(chuàng)建和管理由中央控制器集群——NVP控制集群(NVP Controller Cluster)負(fù)責(zé)。其次,NVP采用軟件實(shí)現(xiàn)的虛擬交換機(jī)將虛擬機(jī)接入網(wǎng)絡(luò)。NVP平臺(tái)最終實(shí)現(xiàn)的效果是在物理網(wǎng)絡(luò)上構(gòu)建虛擬網(wǎng)絡(luò),且虛擬網(wǎng)絡(luò)對(duì)物理網(wǎng)絡(luò)透明,物理網(wǎng)絡(luò)中設(shè)備所見(jiàn)到的不過(guò)是物理服務(wù)器之間普通的網(wǎng)絡(luò)流量而已。
如圖 3所示,NVP的架構(gòu)包括兩大部分:NVP控制集群和傳輸節(jié)點(diǎn)(Transport Nodes)。NVP控制器邏輯上可分為:OpenFlow控制器(OpenFlow Controller)和配置管理器(Configuration Manager)。
圖3 NVP架構(gòu)[6]
其中,OpenFlow控制器通過(guò)OpenFlow協(xié)議實(shí)現(xiàn)對(duì)虛擬交換機(jī)內(nèi)數(shù)據(jù)轉(zhuǎn)發(fā)的管理。由于NVP平臺(tái)采用Open vSwitch作為虛擬交換機(jī),因此與OpenFlow控制器進(jìn)行通信的實(shí)際上是ovs-vswitchd(OVS守護(hù)進(jìn)程),NVP與Open vSwitch間的交互如圖4所示。配置管理器則通過(guò)OVSDB管理協(xié)議(Open vSwitch Database Management Protocol)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)ovsdb的管理。Ovsdb主要用于存儲(chǔ)虛擬網(wǎng)絡(luò)的配置信息,例如虛擬機(jī)與hypervisor的對(duì)應(yīng)關(guān)系和隧道等相關(guān)信息。傳輸節(jié)點(diǎn)包括三種類型:網(wǎng)關(guān)節(jié)點(diǎn)(Gateway Nodes)、服務(wù)節(jié)點(diǎn)(Service Nodes)和虛擬交換機(jī)。其中,網(wǎng)關(guān)節(jié)點(diǎn)指數(shù)據(jù)中心內(nèi)虛擬網(wǎng)絡(luò)與外界通信的連接點(diǎn),可位于數(shù)據(jù)中心或遠(yuǎn)程的企業(yè)網(wǎng)中。服務(wù)節(jié)點(diǎn)是可選的,其主要用于為虛擬網(wǎng)絡(luò)提供多播和廣播服務(wù)。首先由需要進(jìn)行多播和廣播的主機(jī)將數(shù)據(jù)包發(fā)給服務(wù)節(jié)點(diǎn),然后由服務(wù)節(jié)點(diǎn)進(jìn)行復(fù)制并發(fā)給對(duì)應(yīng)的目的主機(jī)。虛擬交換機(jī)(位于Hypervisor內(nèi))為虛擬機(jī)提供網(wǎng)絡(luò)接入,并構(gòu)成網(wǎng)絡(luò)邊緣層(Network Edge)。目前,NVP只控制網(wǎng)絡(luò)邊緣,而核心的物理網(wǎng)絡(luò)則由專用的物理交換機(jī)構(gòu)成。
圖4 NVP與Open vSwitch交互圖
NVP采用STT技術(shù)(Stateless Transport Tunneling Protocol,無(wú)狀態(tài)傳輸隧道協(xié)議)來(lái)構(gòu)建隧道。一般來(lái)說(shuō),選擇隧道技術(shù)時(shí),我們希望它的開(kāi)銷盡可能小。由于STT技術(shù)支持一些網(wǎng)卡加速技術(shù)(NIC offload),如CKO(Checksum Offloading)和TSO(TCP segmentation offloading),故而基于STT構(gòu)建隧道一般具有較好的性能?;贜VP技術(shù),建立虛擬網(wǎng)絡(luò)包括以下三個(gè)步驟:
1)hypervisor和網(wǎng)關(guān)節(jié)點(diǎn)通過(guò)OVSDB管理協(xié)議為NVP控制集群提供虛擬網(wǎng)卡的位置信息,并當(dāng)虛擬機(jī)發(fā)生遷移時(shí)更新這一信息。
2)服務(wù)提供商通過(guò)NVP API配置系統(tǒng)。NVP提供了面向OpenStack的北向接口,可由Openstack提供對(duì)網(wǎng)絡(luò)的配置要求。當(dāng)有新租戶加入系統(tǒng)或已有租戶的配置發(fā)生改變,或者系統(tǒng)底層的物理配置發(fā)生變化,均會(huì)觸發(fā)步驟3)
3)控制器為OVS計(jì)算流表和數(shù)據(jù)庫(kù)表項(xiàng)(比如數(shù)據(jù)庫(kù)中和隧道相關(guān)的表項(xiàng))。然后將計(jì)算所得的轉(zhuǎn)發(fā)狀態(tài)(即流表項(xiàng)和數(shù)據(jù)庫(kù)表項(xiàng))通過(guò)OpenFlow協(xié)議和OVSDB管理協(xié)議送到傳輸節(jié)點(diǎn)上。
為了簡(jiǎn)化上述過(guò)程,NVP提出一種新的計(jì)算模型,nlog。Nlog是一種聲明式語(yǔ)言,因此用戶只需告訴NVP要做什么(給出聲明),而如何實(shí)現(xiàn)則完全由nlog自動(dòng)完成。Nlog直觀看來(lái)就是輸入到輸出的一個(gè)映射。輸入為配置目標(biāo)和位置信息,經(jīng)過(guò)nlog計(jì)算后得到輸出,即流表項(xiàng)和數(shù)據(jù)庫(kù)表項(xiàng)。Nlog的聲明實(shí)質(zhì)是數(shù)據(jù)記錄查詢,每個(gè)查詢就是對(duì)一些數(shù)據(jù)表的連接(join)操作,最終得到head表。Head表是nlog定義的一種特殊的表,它能將表項(xiàng)導(dǎo)出到nlog的運(yùn)行時(shí)引擎中進(jìn)行計(jì)算。nlog采用增量計(jì)算方式,即當(dāng)參與連接操作的表發(fā)生變化時(shí),會(huì)對(duì)受影響的部分所在的表重新做連接操作。
1.4.NSX
NSX的核心思想是將網(wǎng)絡(luò)服務(wù)化。如圖 5所示,如果把虛擬機(jī)看作是一個(gè)計(jì)算服務(wù)的容器,NSX創(chuàng)建的虛擬網(wǎng)絡(luò)則是一個(gè)網(wǎng)絡(luò)服務(wù)的容器。這些以軟件形式存在的服務(wù)則可以是邏輯交換機(jī)、邏輯路由器和邏輯防火墻等等。為了構(gòu)建一個(gè)虛擬網(wǎng)絡(luò),云管理平臺(tái)(CMP)首先通過(guò)NSX控制提供的RESTful接口發(fā)出服務(wù)請(qǐng)求;接受到請(qǐng)求之后,NSX控制器將抽象的網(wǎng)絡(luò)服務(wù)分解到相應(yīng)的虛擬交換機(jī)上,并且這些服務(wù)(虛擬交換機(jī))與負(fù)載(虛擬機(jī))進(jìn)行邏輯連接。為了與負(fù)載進(jìn)行連接,虛擬網(wǎng)絡(luò)與傳統(tǒng)的物理網(wǎng)絡(luò)工作原理是相同的,唯一的不同在于虛擬網(wǎng)絡(luò)中的網(wǎng)絡(luò)服務(wù)實(shí)際上是一個(gè)分布式軟件模塊的邏輯實(shí)例。這些實(shí)例可以直接運(yùn)行在hypervisor中,從而可以降低實(shí)施服務(wù)的開(kāi)銷。
圖5 NSX網(wǎng)絡(luò)虛擬化示意圖[4]
NSX可以認(rèn)為是VMware收購(gòu)Nicira之后將vCNS和NVP進(jìn)行整合之后的產(chǎn)物,因此NSX具有vCNS和NVP的大部分功能。對(duì)于這些重復(fù)的內(nèi)容,我們?cè)谶@里就不再贅述了。相比較前面的產(chǎn)品而言,NSX一個(gè)顯著的特點(diǎn)在于它的兼容性。NSX提供了一個(gè)可擴(kuò)展的平臺(tái),基于這個(gè)平臺(tái)可以運(yùn)行任何應(yīng)用、任何hypervisor、任何的網(wǎng)絡(luò)基礎(chǔ)設(shè)施以及任何的網(wǎng)絡(luò)管理平臺(tái)。對(duì)于用戶來(lái)說(shuō),抽象出來(lái)的虛擬網(wǎng)絡(luò)與物理網(wǎng)絡(luò)沒(méi)有什么不同,因此應(yīng)用不需要為使用虛擬網(wǎng)絡(luò)做任何修改。另外,NSX已經(jīng)實(shí)現(xiàn)了對(duì)Xen、KVM和VMware ESXi等hypervisor,以及CloudStack、OpenStack和VMware vCloud Automation Center的完美支持。因此,NSX是一個(gè)開(kāi)放的平臺(tái),并不會(huì)導(dǎo)致用戶被鎖定在VMware自身的平臺(tái)上,而這一點(diǎn)一般是客戶選購(gòu)產(chǎn)品時(shí)非常關(guān)注的。