『壹』 Overlay網路解決的3個問題
來源於: 為什麼集群需要overlay網路?
Overlay 網路建立在另一個計算機網路之上的虛擬網路(不能獨立出現),Overlay 底層依賴的網路是 Underlay 網路。
Underlay 網路是專門用來承載用戶 IP 流量的基礎架構層,它與 Overlay 網路之間的關系有點類似物理機和虛擬機。Underlay 網路和物理機都是真正存在的實體,它們分別對應著真實存在的網路設備和計算設備,而 Overlay 網路和虛擬機都是依託在下層實體使用軟體虛擬出來的層級。
在實踐中我們一般使用虛擬區域網擴展技術VxLAN(Virtual Extensible LAN)組建 Overlay 網路。VxLAN 使用虛擬隧道端點VTEP (Virtual Tunnel End Point)設備對伺服器發出和收到的數據包進行二次封裝和解封。
兩台物理機可以通過三層的 IP 網路互相訪問:上圖中兩個 VTEP 會相互連接並獲得網路中的 MAC 地址、IP 地址等信息,例如,伺服器 1 中的 VTEP 需要知道想要訪問綠色網路中的 10.0.0.2 虛擬機需要先訪問 IP 地址為 204.79.197.200 的伺服器 2。這些配置可以被網路管理員手動配置、自動學習、也可以通過上層的管理器設置。
當綠色的 10.0.0.1 虛擬機想要向綠色的 10.0.0.2 發送數據時,經過以下步驟:
1) 綠色的 10.0.0.1 會將 IP 數據包發送給 VTEP;
2) 伺服器 1 的 VTEP 收到 10.0.0.1 發送的數據包後;
a) 從收到的 IP 數據包中獲取目的虛擬機的 MAC 地址;
b) 在本地的轉發表中查找該 MAC 地址所在伺服器的 IP 地址,即 204.79.197.200;
c) 將綠色虛擬機所在的虛擬網路標識符(VxLAN Network Identifier、VNI)以及原始的 IP 數據包作為負載,構建新的 UDP 數據包;
d) 將新的 UDP 數據包發送到網路中;
3) 伺服器 2 的 VTEP 收到 UDP 數據包後;
a) 去掉 UDP 數據包中的協議頭;
b) 查看數據包中 VNI;
c) 將 IP 數據包轉發給目標的綠色伺服器 10.0.0.2;
4) 綠色的 10.0.0.2 會收到綠色伺服器 10.0.0.1 發送的數據包。
筆記:以上步驟中的VNI(VxLAN Network Identifier)是幹嘛的? 2) c) 和3) b) 中vni做了什麼處理?整個過程中VTEP起到網關的重要性。
在數據包的傳輸過程中,通信的雙方都不知道底層網路做的這些轉換,它們認為兩者可以通過二層的網路互相訪問, 但是實際上經過了三層 IP 網路的中轉,通過 VTEP 之間建立的隧道實現了連通。 除了 VxLAN 之外,Overlay 網路還有很多實現方案,不過也都大同小異。Overlay 網路雖然能夠利用底層網路在多數據中心之間組成二層網路,但是它的封包和拆包過程也會帶來額外開銷,所以 為什麼我們的集群需要 Overlay 網路呢,本文將介紹 Overlay 網路解決的三個問題 :
1) 雲計算中集群內的、跨集群的或者數據中心間的 虛擬機和實例的遷移 比較常見;
2) 單個集群中的虛擬機規模可能非常大, 大量的 MAC 地址和 ARP 請求會為網路設備帶來巨大的壓力 ;
3) 傳統的 網路隔離技術 VLAN 只能建立 4096 個虛擬網路 ,公有雲以及大規模的虛擬化集群需要更多的虛擬網路才能滿足網路隔離的需求;
Kuberentes 目前已經是容器編排領域的事實標准了,雖然很多傳統行業仍然在使用物理機部署服務,但是越來越多的計算任務在未來都會跑在虛擬機上。 虛擬機遷移是將虛擬機從一個物理硬體設備移到另一個設備的過程,因為日常的更新維護,集群中的大規模虛擬機遷移是比較常見的事情 ,上千台物理機組成的大集群使得集群內的資源調度變得更加容易,我們可以 通過虛擬機遷移來提高資源的利用率、容忍虛擬機的錯誤並提高節點的可移植性 。
當虛擬機所在的宿主機因為維護或者其他原因宕機時,當前實例就需要遷移到其他的宿主機上, 為了保證業務不中斷,我們需要保證遷移過程中的 IP 地址不變,因為 Overlay 是在網路層實現二層網路,所以多個物理機之間只要網路層可達就能組建虛擬的區域網, 虛擬機或者容器遷移後仍然處於同一個二層網路,也就不需要改變 IP 地址。
如上圖所示,遷移後的虛擬機與其他的虛擬機雖然位於不同的數據中心,但是由於上述 兩個數據中心之間可以通過 IP 協議連通,所以遷移後的虛擬機仍然可以通過 Overlay 網路與原集群的虛擬機組成二層網路 ,集群內部的主機也完全不清楚、不關心底層的網路架構,它們只知道不同虛擬機之間是可以連通的。
我們在 為什麼 Mac 地址不需要全球唯一 曾經介紹過二層網路的通信需要依賴 MAC 地址,一個傳統的二層網路需要網路設備中存儲著從 IP 地址到 MAC 地址的轉發表。
目前 Kuberentes 官方支持的最大集群為 5000 節點 ,如果這 5000 個節點中的每個節點都僅僅包含一個容器,這對於內部的網路設備其實沒有太大的壓力, 但是在實際情況下 5000 節點的集群中都包含幾萬甚至幾十萬個容器 , 當某個容器向集群中發送 ARP 請求,集群中的全部容器都會收到 ARP 請求,這時會帶來極高的網路負載 。
在 使用 VxLAN 搭建的 Overlay 網路中 ,網路會將虛擬機發送的數據重新封裝成 IP 數據包,這樣網路只需要知道不同 VTEP 的 MAC 地址,由此可以 將 MAC 地址表項中的幾十萬條數據降低到幾千條 , ARP 請求也只會在集群中的 VTEP 之間擴散 ,遠端的 VTEP 將數據拆包後也僅會在本地廣播,不會影響其他的 VTEP,雖然這對於集群中的網路設備仍然有較高的要求,但是已經極大地降低了核心網路設備的壓力。
Overlay 網路其實與軟體定義網路(Software-defined networking、SDN)密切相關,而 SDN 引入了數據平面和控制平面 ,其中 數據平面負責轉發數據 ,而 控制平面負責計算並分發轉發表 。VxLAN 的 RFC7348 中只定義了數據平面的內容,由該技術組成的網路可以通過傳統的自學習模式學習網路中的 MAC 與 ARP 表項,但是在大規模的集群中,我們仍然需要引入控制平面分發路由轉發表
大規模的數據中心往往都會對外提供雲計算服務,同一個物理集群可能會被拆分成多個小塊分配給不同的租戶(Tenant), 因為二層網路的數據幀可能會進行廣播,所以出於安全的考慮這些不同的租戶之間需要進行網路隔離,避免租戶之間的流量互相影響甚至惡意攻擊 。傳統的網路隔離會使用虛擬區域網技術(Virtual LAN、VLAN),VLAN 會使用 12 比特表示虛擬網路 ID,虛擬網路的上限是 4096 個(2的12次方)。
4096 個虛擬網路對於大規模的數據中心來說遠遠不夠,VxLAN 會使用 24 比特的 VNI 表示虛擬網路個數,總共可以表示 16,777,216 個虛擬網路,這也就能滿足數據中心多租戶網路隔離的需求了。
更多的虛擬網路其實是 VxLAN 順手帶來的好處,它不應該成為使用 VxLAN 的決定性因素。 VLAN 協議的擴展協議 IEEE 802.1ad 允許我們在乙太網幀中加入兩個 802.1Q 的協議頭,兩個 VLAN ID 組成的 24 比特也可以表示 16,777,216 個虛擬網路 ,所以想要解決網路隔離不是使用 VxLAN 或者 Overlay 網路的充分條件。
今天的數據中心包含多個集群以及海量的物理機, Overlay 網路是虛擬機和底層網路設備之間的中間層,通過 Overlay 網路這一個中間層,我們可以解決虛擬機的遷移問題、降低二層核心網路設備的壓力並提供更大規模的虛擬網路數量 :
在使用 VxLAN 構成二層網路中,虛擬機在不同集群、不同可用區和不同數據中心遷移後,仍然可以保證二層網路的可達性,這能夠幫助我們保證線上業務的可用性、提升集群的資源利用率、容忍虛擬機和節點的故障;
集群中虛擬機的規模可能是物理機的幾十倍,與物理機構成的傳統集群相比,虛擬機構成的集群包含的 MAC 地址數量可能多一兩個數量級,網路設備很難承擔如此大規模的二層網路請求,Overlay 網路通過 IP 封包和控制平面可以減少集群中的 MAC 地址表項和 ARP 請求;
VxLAN 的協議頭使用 24 位的 VNI 表示虛擬網路,總共可以表示 1600 萬的虛擬網路,我們可以為不同的虛擬網路單獨分配網路帶寬,滿足多租戶的網路隔離需求;
需要注意的是,Overlay 網路只是一種在物理網路上的虛擬網路,使用該技術並不能直接解決集群中的規模性等問題,而 VxLAN 也不是組建 Overlay 網路的唯一方法,在不同場景中我們可以考慮使用不同的技術,例如:NVGRE、GRE 等。到最後,我們還是來看一些比較開放的相關問題,有興趣的讀者可以仔細思考一下下面的問題:
VxLAN 將原始數據包封裝成 UDP 在網路上分發,那麼 NVGRE 和 STT 分別使用哪些方法傳輸數據呢?
在 Kubernetes 中部署 Overlay 網路應該使用什麼技術或者軟體?