本篇著重在VMware NSX內的邏輯交換器功能,分析其與現有實體環境的差異,並討論如何做設定,並展示如何簡易地產出一個邏輯交換器,最後則說明邏輯交換器底層的VXLAN封裝機制。
要選擇的虛機上可能有多張網卡,因此還要選擇哪些網卡要加入此交換器。選擇之後,按下〔Finish〕按鈕,虛擬機器就被接上這張網卡,如圖6所示。
|
▲圖6 點選要加入邏輯交換器的虛擬機器網卡。 |
既然這兩台虛機都已經接上邏輯交換器,就到VM的〔Summary〕活頁標籤內看一下目前網卡的設定,如圖7所示確定已經是接上所設定的New-Switch交換器。
|
▲圖7 虛機的網卡顯示已接上邏輯交換器。 |
然後,直接console連到虛擬機器去ping另外一台,馬上看到已經可以連通,如圖8所示。
|
▲圖8 兩台接在同一個邏輯交換器的虛機已經可以相互連通。 |
設定方式就是這麼簡單!接著請大家考慮一下:
‧只要受vCenter/NSX管控的虛擬機器,都可以直接被選擇加入邏輯交換器,沒有地點的問題,無論是在同一伺服器、不同機櫃,甚至不同資料中心皆然。
‧從頭到尾沒有做任何的底層硬體設定變更、沒有找交換機、到不同台機器設VLAN/Trunking等等,所有設定都在vCenter的介面內完成。
但為什麼邏輯交換器能夠完全不動到底層的設定,運作原理為何?接下來就為大家進行說明,首先由什麼是網路虛擬化,以及底層的封裝協定VXLAN的介紹開始。
認識VXLAN封裝機制
VXLAN是一個讓邏輯交換器,能在多台不同硬體伺服器上進行運作的封裝協定。先用圖9這張圖進行說明。
|
圖9 透過VXLAN封裝,達成邏輯層的封包於底層伺服器間的傳輸。 |
從圖9內可以看到,能夠很輕易地建立一個邏輯交換器,並且把兩個在不同伺服器上的虛機都放到同一個邏輯交換器內,如圖中上方的虛線所示。但邏輯上如此,實際的網路封包不是用幻想的就能送到目的地去啊?因此在各伺服器間必須要跑一個封裝協定,讓在邏輯層內不同交換器的虛機封包在進行交換時,在底層加入一層封裝,讓來源伺服器(Source Host)知道要將此封裝後的封包送到哪一個目標伺服器(Destination Host)上的哪一個邏輯交換器。在圖9內,原始虛機送出的Ethernet封包以箭頭線表示,而透過封裝後的VXLAN封包則以圖下方的水管線來表示。
再進一步說明,圖10這張圖顯示的是VXLAN的封包內容,有幾個比較重要的地方先說明一下:
|
▲圖10 VXLAN封包說明。 |
淺藍色部分:這裡就是虛機送出來的原始Ethernet Frame。
深藍色部分表頭(VXLAN Header):底層的實體伺服器傳送與接收VXLAN封包時,必須知道這個封包是屬於哪個邏輯交換器。因此這層表頭內最重要的就是VXLAN NI(VNI),這就是邏輯交換器的實際代號,一般由5000開始。可以想像VNI就像是VLAN ID的用途一樣,是用來區分不同的邏輯交換器。VNI欄位有24位元(bit),因此不會像VLAN ID只有12位元= 4096一樣,在大型資料中心(Datacenter)內很容易就耗盡。
橘色部分表頭(Outer UDP Header):這是底層網路設備實際看到的UDP表頭,來源Port會由內部Ethernet Frame Header的Hash值計算出,而Destination Port目前VMware NSX版本預設是採用8472,但也可依據IETF新訂定的標準改為4789。
紅色部分表頭(Outer IP Header):這是底層網路設備實際看到的IP表頭,重點在來源IP與目的IP當然不是內部的虛機IP,而是各台vSphere伺服器上的VXLAN VMKernel IP(這個介面叫做VTEP,全名為VXLAN Tunnel Endpoint)。因此網路設備可以依據這邊填入的目的IP,將這個封包送往正確的目的vSphere伺服器。Source IP會是來源虛機所在之vSphere Host的VTEP IP,而Destination IP則會是目的虛機所在vSphere Host的VTEP IP。
綠色部分表頭(Outer Ethernet Header):就不多做解釋了,當然這邊的來源與目的MAC不是虛機的,而是來源及目的vSphere Hosts的VTEP對應MAC,或是中間的L3 Gateway等等。
接著,有幾個重點需要先說明一下:
1. 因為原有的Ethernet封包大小可能會有1,514位元組
(byte),而這邊又額外加上50 byte的VXLAN Overhead(VXLAN 8 bytes, Outer UDP 8 bytes, Outer IP 20 bytes, Outer Ethernet 14 bytes),因此部署VXLAN時的一個必要條件是底層網路環境的MTU必須要設置到至少1,600。不是1,564的原因是保留一些空間,若後續升級要進行封裝協定的更換或底層有進行其他封裝,無須再做底層調整。
2. 如前說明,vSphere伺服器上負責傳送VXLAN的
VMKernel叫做VTEP(VXLAN Tunnel Endpoint)。VTEP與VTEP間的傳輸是可以跨L3網路的,也就是說,即使兩台vSphere Host底層不是在同一個VLAN內,而是跨L3網路建置,仍然可以在其上建立一個L2的邏輯交換器。
3. VXLAN對NSX來說,只是一個底層的封裝協定,
是可能被更換成其他封裝協定,如STT/NVGRE;同樣地,VMware與Intel、Microsoft、Red Hat年前也開始發展取代VXLAN的新協議Geneve。無論如何,VXLAN這個協議僅是用來處理虛擬層內的網路封包要如何於底層實體網路內傳送到正確目的地的現行主要機制。