虛擬化對於計算的抽象,大家可能相對熟悉,也許都有在單機使用諸如Virtual PC或者Virtual Box的經驗。使用的這些虛擬化軟體的第一印象就是我們的CPU可以同時運行多套不同的操作系統,並且其上應用程式並行不悖。計算的抽象使得同一套硬體設備上的操作系統之間得以相互隔離,猶如一個身體擁有兩個甚... ...
虛擬化對於計算的抽象,大家可能相對熟悉,也許都有在單機使用諸如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中抽象出的概念,如下圖連接虛擬網卡與虛擬網卡之間的虛線就好比虛擬網路,下圖出現了像個虛擬網路,他們是相互隔離的。可以用VLAN來類比,但是卻不是VLAN技術,而是NVGRE數據包封裝技術。
如下圖都是在物理主機上創建出的用戶連接不同虛擬網路的虛擬網卡,這些網卡的配置協議與普通的物理網卡幾乎相同,可以在其中配置IPv4和IPv6。當然在虛擬機中更普遍存在了。