云計算之虛擬網絡背后的技術
1、SDN
傳統的網絡設備是分布式和去中心化的,每臺設備可以通過自主學習和人工配置,可以知道如何轉發數據包,而不需要一個集中式的控制設備。
SDN這個詞本身就是軟件定義網絡(Software?Defined?Network),在虛擬網絡里,vSwitch和vRouter這些設備,通常都不用登錄上去敲命令(雖然也可以這么做),而是通過云平臺配置。云平臺通過API和SDN控制器交互,SDN控制器計算并下發轉發表到vSwitch和vRouter,完成配置。
SDN原理示意
所謂Overlay,是在傳統的物理網絡(Underlay)基礎之上,構建出一個虛擬的邏輯網絡。從技術上講,Overlay的二層數據包封裝在物理網絡的三層報文中傳輸,到達目的地之后再解封裝得到Overlay的二層報文。實際上,這就是一種“L2 over L3”的隧道封裝技術。這方面的協議比較多,主要有VxLAN
(L2 over UDP)、NVGRE
(L2 over GRE)、STT
(L2 over TCP)等。
2、VxLAN
VxLAN
(Virtual eXtensible Local Area Network,虛擬可擴展局域網)是實現Overlay
網絡的主流技術,正是通過VxLAN,才實現了VPC(包括子網)的完美隔離。
大體而言,就是VM之間交互的數據包,在離開vSwitch時會加上封裝,形成隧道,不同子網帶有不同的隧道號標識
。解隧道封裝的時候,看到隧道號不對,就會拋棄,這樣不同子網內的虛擬機無法進行直接通信(除非做了路由),這就實現了隔離。
VxLAN不僅解決了隔離的問題,還解決了傳統二層技術(如VLAN)難以解決的大規模二層互連的問題,由于通過三層傳輸,虛機的部署和遷移就不受二層物理網絡限制了。VxLAN是怎么將L2 over在L3之上呢,答案是:將以太網幀封裝在UDP包中。
VxLAN的包結構
如上圖所示,Overlay的二層數據幀被封裝在三層的IP包中(精確的說,是四層的UDP報文中),封裝的頭部是VxLAN Header,里面的主要內容就是24bit的VNI(VxLAN ID),每個子網都有一個VNI,這樣即便是同一臺主機上的兩臺VM,即便處于同一IP段,只要他們在不同的子網,就無法通信,因為子網的OVS看見不同的VNI就會拋棄掉。
做封裝和解封裝的端點被稱為VTEP,它同時也就是VxLAN隧道的起點和終點。VTEP通常是由OVS實現的,子網中VM向外發出的二層報文,會由OVS進行封裝,做成UDP包發出;同時OVS會在UDP特定端口監聽,收到VxLAN報文后,如果VNI正確,則去掉封裝,將封裝前的二層報文轉發給相應的VM。
對于裸金屬(云管理的物理機)而言,由于它沒有OVS,它的Overlay通信要通過VxLAN網關(承擔VTEP功能)實現,或者可以在物理機上插一塊智能網卡,由智能網卡做VTEP。
VTEP有軟件和硬件兩種,前面講的OVS就是軟件VTEP,也有用硬件交換機做VTEP的。如果VTEP由軟件完成,這種Overlay就叫Host Overlay;如果由硬件設備完成,就叫Network Overlay;如果都有,就叫混合Overlay。
對于Host Overlay而言,物理交換機網絡中的Leaf和Spine僅進行IP報文的高速轉發,不處理VxLAN報文。
Overlay和Underlay示意
上圖中,VM1和VM2要通信的話(無論是否在同一子網),由OVS封裝成VxLAN報文,由leaf和spine交換機進行物理傳輸;對于在同一臺宿主機上的VM3和VM4,如果它們在同一VPC的同一子網,OVS就直接轉發了(不走VxLAN);如果是同一VPC的不同子網,也不用走VxLAN,由vRouter和OVS轉發;但如果在不同VPC,就也要走VxLAN,因為不同VPC的隔離就是靠VxLAN實現的。