kubernetes實踐之二十:網路原理

百聯達發表於2018-04-22
一:體系結構圖


二:說明

1.網路名稱空間
處於不同名稱空間的網路棧是完全隔離的,彼此之間無法通訊,就好像兩個“平行宇宙”,通過對這種網路資源的隔離,就能在一個宿主機上虛擬多個不同的網路環境。

2.網路名稱空間的通訊,Veth裝置對
引入Veth裝置對是為了在不同的網路名稱空間之間進行通訊,利用它可以直接將兩個網路名稱空間連線起來。由於要連線兩個網路名稱空間,所以Veth裝置都是成對出現的,很像一對乙太網網路卡,並且中間有一根直連的網線。
3.網橋
Linux核心通過一個虛擬的網橋裝置來實現乙太網口(Veth)之間的橋接。

4.Docker的網路實現
Docker Daemon第一次啟動時會建立一個虛擬的網橋,預設的名字是docker0,在私有網路空間中給這個網橋分配一個子網。
針對由Docker建立出來的每一個容器,都會建立一個虛擬的Veth裝置對,其中一端關聯到網橋上,另一端使用Linux的網路名稱空間技術,對映到容器內的eth0裝置,然後從docker0網橋的地址段內給eth0介面分配一個IP地址

5.kubernetes容器之間通訊
Pod內的容器共享一個網路名稱空間,共享一個Linux協議棧,可以用localhost地址訪問彼此的埠

6.kubernetes同一Node的Pod間通訊
同一Node中Pod的預設路由都是docker0的地址,由於它們關聯在同一個docker0網橋上,地址網段相同,所有它們之間應當是能直接通訊的。

7.kubernetes不同Node的Pod間通訊
不同Node中Pod間通訊要滿足2個條件: Pod的IP不能衝突; 將Pod的IP和所在的Node的IP關聯起來,通過這個關聯讓Pod可以互相訪問。

8.Flannel工作原理

Flannel實質上是一種“覆蓋網路(overlay network)”,也就是將TCP資料包裝在另一種網路包裡面進行路由轉發和通訊,目前已經支援UDPVxLANAWS VPCGCE路由等資料轉發方式。

1. 資料從源容器中發出後,經由所在主機的docker0虛擬網路卡轉發到flannel0虛擬網路卡,這是個P2P的虛擬網路卡,flanneld服務監聽在網路卡的另外一端。

2.Flannel通過Etcd服務維護了一張節點間的路由表。

3. 源主機的flanneld服務將原本的資料內容UDP封裝後根據自己的路由表投遞給目的節點的flanneld服務,資料到達以後被解包,然後直接進入目的節點的flannel0虛擬網路卡,然後被轉發到目的主機的docker0虛擬網路卡,最後就像本機容器通訊一下的有docker0路由到達目標容器。

9.Calico架構

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2153186/,如需轉載,請註明出處,否則將追究法律責任。

相關文章