虛擬化對于計算的抽象,大家可能相對熟悉,也許都有在單機使用諸如Virtual PC或者Virtual Box的經驗。使用的這些虛擬化軟件的第一印象就是我們的CPU可以同時運行多套不同的操作系統,并且其上應用程序并行不悖。計算的抽象使得同一套硬件設備上的操作系統之間得以相互隔離,猶如一個身體擁有兩個甚至更多靈魂,這是什么鬼?那么接下來很自然的一件事就是,這些靈魂之間該如何溝通呢?依然只有一個身體,如何相互握手和交流,如何對外聯系和提供服務。因而對于虛擬化而言,最重要的基礎設施除了存儲外,再就是網絡,即需要實現網絡的虛擬化。這里我們粗略描述Windows Server 2012 R2和System Center Virtual Machine Manager 2012 R2(以下簡稱SCVMM)實現網絡的虛擬化的基本原理,有需要詳細了解的可以看微軟的電子書Microsoft System Center: Network Virtualization and Cloud Computing。
一、什么是網絡虛擬化
現在有一種流行的說法叫做軟件定義網絡,網絡中有不同的解釋,我自己簡單理解為是更多通過軟件編程來實現對網絡的集中管理。比如之前在交換機上的VLAN功能,需要在每臺交換機進行配置,不同廠商就有不同的配置方式,配置復雜且管理成本高昂,那么通過一個開放、統一和標準的軟件平臺對網絡硬件進行控制,那將極大改善這一狀況。當然由于商業競爭的因素,讓各個廠商擁有開放包容的心,不是件容易的事,因而軟件定義網絡還有很長的路要走。那么回到網絡虛擬化,即可以認為是一種在特殊情形下的軟件定義網絡,即在一個或者多個數據中心里實現軟件定義網絡的美好圖景。除了通過統一軟件平臺來管理網絡外,網絡虛擬化也有自己特殊的應用目的和需求。
1、需要實現每個虛擬機都可以像單個物理機一樣的網絡功能。同一臺物理機上的不同虛擬機之間,不同物理機上的虛擬機之間,虛擬機與物理機之間,虛擬機與外部網絡能夠屏蔽底層的硬件差異,在虛擬化網絡上互聯互通。
2、需要實現物理網絡的更高效的利用。在一個物理網絡上(通物理機上同一個物理網卡)承載更多的相互隔離且負載均衡的網絡(這點類似VLAN)。數據中心往往需要配置多種相互隔離的網絡以承載各類應用,例如域網絡、集群心跳網絡、集群管理網絡、虛擬機遷移網絡和外部網絡等等,如果在硬件上通過VLAN或者直接增加硬件的方式實現,那將是一件費時費力費錢的工作。
3、需要實現網絡的高可用性。物理設備,包括網線、網卡和交換機等都有損壞的可能,需要有一種方案降低他們損壞后對網絡造成的影響。
4、需要保障虛擬化平臺上高可用的虛擬機的動態遷移。當物理網絡或者物理主機損壞而掉線后,其上具有高可用性的虛擬機將執行遷移操作,在另一臺物理主機上重新上線,甚至讓外界無法感知其遷移的過程,這要求虛擬化網絡能夠保證虛擬機上的所有網絡配置在另一臺物理主機上是依然有效的。
以上每一項都不是件容易的事,那么我們接下來看看SCVMM如何在統一軟件管理平臺上實現這所有目的和需求。
二、Windows 2012 R2中的網絡虛擬化
實現網絡虛擬化的本質是對物理網絡的抽象,也就是在物理網絡上構建虛擬網絡以適應不同的應用場景。這里的核心技術是IP數據包的包裝協議。各家的虛擬化平臺采用的IP包裝協議并不同,例如主要有:Virtual eXtensible Local Area Network (VXLAN),Stateless Transport Tunneling Protocol for Network Virtualization (STT)和Generic Routing Encapsulation (GRE)。 SCVMM采用特殊的GRE協議,稱為Network Virtualization using Generic Routing Encapsulation (NVGRE)。這些協議的主要目的就是對原始IP數據包進行封裝,以實現網絡數據傳輸的隔離。
SCVMM可以通過幾個層次對物理網絡進行重新定義,這里我們考慮如下場景:兩臺物理主機通過兩個獨立的物理網絡相連,這在數據中心中應該是最為常見的狀況。
下面我們來看看物理主機的網絡在下面各個層面的配置:
1、建立網卡組(NIC Team)
將物理主機上2個及以上物理網卡合并為網卡組,可以在這些物理網卡之間形成冗余和實現負載均衡。如下圖所示,在物理主機的操作系統層面,合并的網卡組表現為一張網卡,相互連接為一個網絡。網卡組的功能其實由Windows 2012 R2提供的,SCVMM可以充分調用Windows 2012 R2、Hyper-V和Failover Cluster的所有資源和功能。
在Windows Server 2012中輸入命令lbfoadmin可以查看和配置網卡組,如下圖在物理主機cloud-pm-ds01上創建了兩個網卡組,每個網卡組中包含2張物理網卡。
在網絡連接界面中,物理網卡已經無法設置網絡相關參數,而轉移到網卡組進行設置。仔細查看網卡和網卡組屬性中的Networking選項,可以發現Microsoft提供了豐富的網絡協議,實現各種功能即是配置的網絡協議不同。網卡組使用的關鍵協議應該是Microsfot Load Balancing/Failover Provider、IPv6和 IPv4這些。在后文中更多關于網絡虛擬化提供的功能也只是在增加和配置更多的協議,這在一定程度上即是所謂的軟件定義網絡吧。
但這里請忽略Logical Switch這樣對網卡組的命名,為什么不是Team這樣的命名,這里可以先告訴大家的是Logical Switch是一個更高層次的抽象,下文將會涉及。
2、虛擬交換機(Virtual Switch)
在網卡或網卡組的基礎上,我們可以建立虛擬機交換機,一個物理網卡或者一個網卡組我們可以建立一個虛擬交換機,以便對該網絡進行進一步虛擬化。如下圖所示:
虛擬交換機功能由Hyper-V提供,我們安裝Hyper-V角色,并打開Hyper-V Mananger,右鍵通過Virtual Switch Mananger對虛擬交換機進行創建和管理。
在Windows網絡連接界面,我們看到虛擬交換機可以與網卡組配置在一起。只是多了一個新協議Hyper-V Extensible Virtual Switch。但是同時會取消對IPv4和IPv6的配置,因為這兩項協議將被轉移到虛擬網卡上進行配置。這時如下圖中的設備Management Logical Switch現在起的作用是對一個或多個物理網卡的抽象,它可以承擔起網卡組的負載均衡的作用,也承擔虛擬交換機的作用,虛擬交換機與虛擬網卡互聯互通。這與物理上的交換機的狀態是不太一樣的,物理交換機處在網絡的中間位置,而虛擬交換機同時在兩端,為主機配置相同的虛擬交換機意味著兩者通過該虛擬交換機的底層物理鏈路連接。
3、虛擬網卡(Virtual Network Adapter)
在虛擬交換機的基礎上,可以創建虛擬網卡,以連接不同的網絡。虛擬網卡一般出現在虛擬機上,用于虛擬機連接該網絡,也可以出現在物理主機上,用于物理主機連接該虛擬的網絡。虛擬網卡的數量幾乎不受限制,如有有必要,可以創建多個虛擬網卡連接同一個虛擬網絡。這里“虛擬網絡”是SCVMM中抽象出的概念,如下圖連接虛擬網卡與虛擬網卡之間的虛線就好比虛擬網絡,下圖出現了像個虛擬網絡,他們是相互隔離的??梢杂肰LAN來類比,但是卻不是VLAN技術,而是NVGRE數據包封裝技術。
如下圖都是在物理主機上創建出的用戶連接不同虛擬網絡的虛擬網卡,這些網卡的配置協議與普通的物理網卡幾乎相同,可以在其中配置IPv4和IPv6。當然在虛擬機中更普遍存在了。