ZStack--網絡模型1:L2和L3網絡

 

ZStack將網絡模型抽象爲L2和L3網絡。L2網絡提供一種二層網絡隔離的方式,而L3網絡主要和OSI七層模型中第4層~第7層網絡服務相對應。咱們的想法是使用管理員熟悉的術語和概念,來形容ZStack的網絡模型,使得管理員能夠方便快捷的建立網絡拓撲。編程

注:咱們將不涉及任何在Hypervisor端虛擬化技術的網絡實現細節;例如,咱們將不討論ZStack如何在Linux操做系統中創造網橋或VLAN設備。這篇文章的目的是給你介紹ZStack網絡模型的簡要構想。若是你尚未閱讀「通用插件系統」的話,咱們強烈建議你去閱讀一遍,由於許多和插件相關的術語將在下文被提到。後端

 

概述安全

雲計算中最使人興奮和最困難的部分應該是網絡模型。雲技術給傳統的數據中心帶來的最大的變革是,管理員不須要花費幾天甚至幾周的時間去建立或改變網絡的拓撲結構,相反,他們能夠幾分鐘就能完成之前很艱鉅的任務,經過點擊在IaaS軟件用戶界面上的一些按鈕。網絡

爲了達到這種簡單性,IaaS軟件必須有一個清晰、靈活的網絡模型,能夠幫助管理員在雲中創建大多數的,傳統數據中內心的典型的網絡拓撲。並且,更重要的是,它必須容許管理員改變已經構建好的網絡,在任何須要的時候,而無需從新部署整個雲。數據結構

ZStack的網絡模型的總體畫面就像:負載均衡

 

一個L2網絡,精確地表示了一個二層網絡廣播域的,是全部網絡元素的基礎。在L2網絡之上,有各類L3網絡和網絡服務提供模塊;一個L3網絡是一個與網絡服務相關的子網;儘管一個L2網絡一般只包含一個L3網絡,只要L3網絡的IP段不衝突,多個L3網絡能夠並存於同一L2網絡。一個L3網絡可能有一個或多個屬於同一子網的IP段,IP地址分段的目的是爲了讓用戶保留一部分來自子網的IP。網絡服務,相似於DHCP、DNS,由綁定到一個L2網絡上的提供器提供給L3網絡。ui

注:因爲虛擬私有云(VPC)還沒有在這個ZStack版本(0.6)支持,上述網絡模型不顯示VPC將如何工做。然而,概念是相似的,VPC只是一個爲多個L3網絡設計的,有編程選路功能的調度器。咱們將在將來的ZStack版本中引入VPC,不久以後。雲計算

 

L2網絡spa

一個L2網絡負責提供一種二層隔離方法,能夠是一個純粹的L2技術(如VLAN),或一個網絡覆層(overlay)技術(如GRE隧道,VxLAN)。ZStack不關心L2網絡在後端使用的技術細節,因此包含必要的L2信息的數據結構--L2NetworkInventory--是高度抽象的:操作系統

 

FIELD

DESCRIPTION

uuid

L2 network UUID

name

a short name

description

a long description

zoneUuid

uuid of zone the L2 network belongs to

physicalInterface

a string containing information necessary to implement the L2 network at the backend. for example, 'eth0'

type

L2 network type

attachedClusterUuids

a list of cluster uuid the L2 network has attached to

L2網絡的子類型可能有額外的屬性,例如,L2VlanNetwork有一個額外的字段的vlan

 

綁定策略

在真實的數據中心中,L2網絡一般表明主機之間一個的物理網絡鏈接。例如,在同一L2交換機下的主機可能在同一個L2網絡中。網絡的鏈接不是一成不變的,它可能會在任何數據中心的物理設備改變的時候改變,例如管理員從新配置(re-wire)一個L2交換機。爲了提供一種靈活的、描述主機和L2網絡之間的關係的方式,ZStack採用了一種所謂的綁定策略,容許一個L2網絡鏈接從多個集羣(主機的集合)中綁定/解綁。

上圖,Cluster1和Cluster2中的主機都是掛載在L2 Network1上,同時Cluster2上的主機也掛載在L2 Network2上,管理員能夠同時將L2 Network1綁定兩個集羣,卻不能僅僅把L2 Network2綁定在Cluster2上。一段時間後,若是管理員爲了刪除L2 Network1上的鏈接,從新配置在Cluster2上的主機,他們能夠從Cluster2中解綁L2 Network1去反映當前的網絡鏈接。

集羣和L2網絡之間的掛載關係,展現了在這些集羣內的主機之間創建L2廣播域的行爲,這並不老是涉及到物理鏈接的變化。例如,鏈接到標記的交換機端口的主機,能夠在以太網設備上使用操做系統中相同的VLAN建立網橋,用來爲鏈接到這些網橋的虛擬機創建一個L2廣播域;在這種狀況下,綁定或解綁L2網絡並不意味着任何物理基礎設施的變化,但意味着建立或刪除一個L2廣播域的行爲。

上圖所示,一旦管理員建立一個包含VLAN 10的L2VlanNetwork,並把它掛載到cluster1和cluster2上,一個廣播域在這些集羣中的主機之間被建立。虛擬機管理程序能夠經過各類方式來實現L2廣播域,例如,KVM主機能夠在它們的Linux操做系統上經過VLAN設備(VLAN 10)建立網橋;若是L2VlanNetwork解綁集羣cluster2後,被解綁的集羣中的主機將經過刪除它們的VLAN(10)網橋的方式,從廣播域中被移除。這種建立/銷燬廣播域的概念適用於全部L2網絡類型;例如,綁定一個OvsGreL2Network到KVM集羣上可能致使GRE隧道在這些主機中被建立,而將一個OvsGreL2Network解綁可能致使GRE隧道被刪除。

這種綁定策略有一個額外的好處是,考慮到了限制虛擬機能夠運行的主機。由於虛擬機老是和L3網絡一塊兒被建立,這些L3網絡屬於一些L2網絡,虛擬機將只被分配給已經綁定這些L2網絡的集羣中的主機。經過這種方式,管理員能夠經過L2網絡把主機劃分到不一樣的池中,例如,一個鏈接了高帶寬的L2網絡的集羣,一個鏈接了公有L2網絡的集羣。若是管理員想把全部的主機都放在一個單一的池中,他們可讓全部的L2網絡綁定全部的集羣。

 

後端實現

經過虛擬化技術,L2網絡的後端實現是高度依賴Hypervisor的。例如,在KVM主機上實現L2VlanNetwork就是建立一個VLAN設備的網橋,但對於VMWare ESXi主機則是配置vSwitch。爲了讓L2網絡的實現和Hypervisor解耦,ZStack將實現某種類型L2網絡的責任委託給Hypervisor插件。爲了實現一個L2網絡,定義了兩個擴展點。第一個是L2NetworkRealizationExtensionPoint

public interface L2NetworkRealizationExtensionPoint {

    void realize(L2NetworkInventory l2Network, String hostUuid, Completion completion);

 

    void check(L2NetworkInventory l2Network, String hostUuid, Completion completion);

   

    L2NetworkType getSupportedL2NetworkType();

   

    HypervisorType getSupportedHypervisorType();

}

當一個L2網絡被綁定到一個集羣,這個拓展點將被集羣中的每一個主機所調用,這個Hypervisor插件能夠藉此機會在後端主機實現網絡;例如,KVM的插件同時有KVMRealizeL2NoVlanNetworkBackendKVMRealizeL2VlanNetworkBackend,後者拓展了L2NetworkRealizationExtensionPoint,爲了在Linux操做系統創造網橋。這個擴展點是很是有用的,對於不須要知道虛擬機信息的L2網絡而言。L2NoVlanNetwork和L2VlanNetwork都屬於這一類。

然而,一些L2網絡可能只能在虛擬機被建立的時候實現,例如,一個L2VxlanNetwork可能須要查找虛擬機全部者賬戶的VID,爲了創建一個L2廣播域;在這種狀況下,Hypervisor插件能夠實現另外一個擴展點PreVmInstantiateResourceExtensionPoint

publicinterfacePreVmInstantiateResourceExtensionPoint{
voidpreBeforeInstantiateVmResource(VmInstanceSpecspec)throwsVmInstantiateResourceException;   
   
voidpreInstantiateVmResource(VmInstanceSpecspec,Completioncompletion);    
   
voidpreReleaseVmResource(VmInstanceSpecspec,Completioncompletion);    
}

插件能夠從VmInstanceSpec中獲取獲取目標主機和虛擬機的信息,而後在目標主機建立虛擬機以前實現一個L2網絡。

 

L3網絡

一個L3網絡是建立在L2網絡上的一個子網,與網絡服務相關聯;它能夠有多個IP地址範圍,只要它們屬於同一個L3網絡且彼此並不衝突。

在上面的圖片中有兩個IP範圍(192.168.0.10 - 192.168.0.50)和(192.168.0.60 - 192.168.0.100),從192.168.0.51到192.168.0.59的IP被保留,這樣管理員能夠把它們分配給不被ZStack管理的設備。

若是沒有由網絡服務提供模塊提供的、和底層的L2網絡服務相關的網絡服務,L3網絡沒有任何用處。網絡服務提供模塊能夠提供一個或多個網絡服務,例如,ZStack的默認虛擬路由提供模塊可以提供幾乎全部常見的網絡服務如DHCP、DNS、NAT等,而F5提供模塊可能只提供負載均衡服務。在ZStack版本(0.6)中,網絡服務提供模塊只能在L2網絡被建立的時候和L2網絡關聯;例如,實現了L2NetworkCreateExtensionPoint的虛擬路由,將在任何L2網絡建立後與之關聯。

管理員能夠將網絡服務綁定到一個L3網絡;對於一類服務,只有一個網絡服務提供模塊提供的服務可被綁定到這個L3網絡;例如,你不能未來自不一樣提供模塊的兩個DHCP服務綁定到同一L3網絡。在ZStack版本(0.6)中,定義了六種網絡服務類型:DHCP、DNS、NAT、EIP、端口轉發和安全組,提供模塊只須要實現相應的後端:NetworkServiceDhcpBackendNetworkServiceDnsBackend,NetworkServiceSnatBackend,EipBackend,PortForwardingBackend,SecurityGroupHypervisorBackend來提供這些服務。在「網絡模型2:虛擬路由器的網絡服務提供模塊」,咱們將討論咱們引用到的提供模塊——虛擬路由,你能夠探索更多的細節。

 

總結

在這片文章中,咱們簡要地解釋了ZStack的網絡模型。在沒有挖掘後臺Hypervisor的細節的狀況下,咱們演示了ZStack是如何將OSI模型抽象爲L2網絡(layer 2),L3網絡(layer 3)以及網絡服務(layer 4~7)。在下一篇文章中,咱們將詳細闡述網絡服務提供模塊的參考實現,關於它如何在虛擬機中實現DHCP、DNS、NAT、EIP和端口轉發。

相關文章
相關標籤/搜索