作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化暨分散式安全防護技術方案的介紹與推廣。 

 

接下來的數篇文章要談邏輯交換器的相關內容,第一篇先由什麼是VXLAN與為什麼需要VXLAN開始。為什麼呢?因為和很多夥伴與用戶交流時,常碰到幾個問題像

  • 網路虛擬化不就是VXLAN嗎?(呃…網路虛擬化還有很多功能)
  • 為什麼要特別談邏輯交換器與VXLAN,這世界不是早就有邏輯網路叫做VLAN了嗎?(VXLAN與VLAN初始的概念是很類似啦)
  • 在原有的虛擬分散式交換器vDS內不就已經有一個沒有人用的VXLAN技術了嗎?為何NSX內還要持續地談呢?(對,這真的要好好解釋)

 

不把VXLAN解釋清楚,沒辦法清晰的說明邏輯交換器的功能。所以開始吧!

 

VXLAN是一個讓邏輯交換器能在多台不同硬體伺服器上進行運作的封裝協定。先用下面這張圖進行說明:

 

圖說:透過VXLAN封裝,達成邏輯層的封包於底層伺服器間的傳輸

 

圖內可以看到我們能夠很輕易地建立一個邏輯交換器,並且把兩個在不同伺服器上的虛機都放到同一個邏輯交換器內,如圖內的綠色線所示。但邏輯上如此,實際的網路封包不是用幻想的就能送到目的地去啊?因此在各伺服器間必須要跑一個封裝協定,讓在虛擬層內不同邏輯交換器的虛機封包在進行交換時,在底層加入一層封裝,讓來源伺服器(Source Host)知道要將此封裝後的封包,送到哪一個目標伺服器(Destination Host)上的哪一個邏輯交換器去。在圖內,原始虛機送出的Ethernet封包以藍色線表示,而透過封裝後的VXLAN封包則以橘色線說明。

 

更進一步,下面這張圖是VXLAN的封包內容

 

圖說:VXLAN封包說明

 

 

幾個比較重要的點先說明一下。

 

淺藍色部分: 

 

這邊就是虛機送出來的原始Ethernet

 

深藍色部分表頭  (VXLAN Header) 

 

底層的實體伺服器傳送與接收VXLAN封包時,必須知道這個封包是屬於哪個邏輯交換器。因此這層表頭內最重要的就是VXLAN NI (VNI),這就是邏輯交換器的實際代號,一般由5000開始。讀者可以想像VNI就像是VLAN ID的用途一樣,是用來區分不同的邏輯交換器。VNI欄位有24 bit,因此不會像VLAN ID只有12 bit = 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…

 

這邊有幾個點需要與各位讀者說明一下

 

  • 因為原有的Ethernet封包可能會有1,500 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,550的原因是保留一些空間,若後續升級要進行封裝協定的更換,無需再進行底層調整。

 

  • 我們還沒有討論來源伺服器如何知道要把網路封包送給哪一個目的伺服器。我們也沒有說明VXLAN如何處理網路內的BUM (Broadcast / Unknown Unicast / Multicast)封包複製。這些會在後續的文章繼續解釋。

 

  • 如前說明,vSphere伺服器上負責傳送VXLAN的VMKernel叫做VTEP (VXLAN Tunnel Endpoint)。VTEP與VTEP間的傳輸是可以跨L3網路的。

 

  • VXLAN對NSX來說只是一個底層的封裝協定,是可能被更換成其他封裝協定如STT / NVGRE的;同樣VMware與Intel / Microsoft / Redhat年前也開始發展取代VXLAN的新協議Geneve。無論如何,VXLAN這個協議僅是用來處理虛擬層內的網路封包要如何於底層實體網路內傳送到正確目的地的現行主要機制。

 

  • VXLAN已經於2014年8月成為IETF標準了(RFC 7348)

 

同時我希望藉最後的段落解釋一下VXLAN與VLAN最重要的差別。請各位先想像一下傳統沒有VXLAN,只有VLAN的vSphere虛擬環境。如果有一個新的系統或是租戶要上線,需要四個邏輯網段比如說Web / AP / DB / Backup。請問如果是各位要負責建立這些網路,必須要到哪邊去進行網路組態變更,讓用戶的系統能接起來能動?

 

  • 首先,我們需要在vCenter內的distribution switch上加上4個port groups並設定對應VLAN,分別對應到這四個邏輯網段
  • 更重要的,IT必須要去多台的底層實體Switch上,把這4個新的網段所對應的VLAN加進去,隨之而來需要變動的可能包括Trunk ACL、routing interface等等一大堆底層設定的變動

 

但在VXLAN的環境內呢?請大家參考下面這個圖,是一個非常標準的vSphere伺服器安裝時的網路設定方式

 

圖說:vSphere伺服器網路設定方式

 

 

我們會設定不同的VMKernel在vSphere伺服器上,如Management / vMotion / HA-VSAN / FT / Storage等等,上面這張圖與傳統不同的,是還有一個VXLAN的VMKernel,這就是前述的VTEP介面。實體交換器上需要對應各個VMKernel去設定不同的VLAN,但這邊都是在安裝vSphere伺服器時的第一次工。

 

重點是,當今天有新系統與新租戶要增加一大票不同的邏輯交換器 / 邏輯網段時,所有不同的邏輯交換器內網路封包,在實體網路上都是封裝到同一個VLAN,也就是由上圖的VXLAN VMKernel (VTEP) 送出,底層網路裡全部是由同一個已經建置的VLAN (VLAN 88)傳送。因此,無論在軟體-邏輯層做了多少的變動, 底層硬體網路都無需再進行組態變更,就只是提供一個高速傳輸的平台供VXLAN封包傳送而已。

 

而這,就是VXLAN與VLAN最大的差別。VLAN實際上,還是一個與硬體設備綁定的網路機制,而藉由VXLAN或是類似的封裝協定,才能真正建立與硬體脫鉤,真正的”網路虛擬化”。