Kubernetes——網(wǎng)絡通訊方式

kubernetes網(wǎng)絡通訊模式

Kubernetes的網(wǎng)絡模型假定了所有Pod都在一個可以直接連通的扁平的網(wǎng)絡空間中,這在GCE(Google Compute Engine)里面是現(xiàn)成的網(wǎng)絡模型,Kubernetes假定這個網(wǎng)絡已經(jīng)存在。而在私有云里搭建Kubernetes集群,就不能假定這個網(wǎng)絡已經(jīng)存在了。我們需要自己實現(xiàn)這個網(wǎng)絡假設,將不同節(jié)點上的Docker容器之間的互相訪問先打通,然后運行Kubernetes。

同一個Pod內(nèi)的多個容器之間網(wǎng)絡互訪:基于Pause容器的網(wǎng)絡棧Lo(共享網(wǎng)卡)
各個Pod之間的網(wǎng)絡通信:Overlay Network
Pod與Service之間的通訊:各節(jié)點的IpTables規(guī)則(新版本中已經(jīng)加入了LVS機制,轉(zhuǎn)發(fā)效率將會更高,上限也更高)

網(wǎng)絡解決方案Flannel

Flannel是CoreOS團隊針對Kubernetes設計的一個網(wǎng)絡規(guī)劃服務,簡單來說,它的功能是讓集群中的不同節(jié)點主機創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。而且它還能在這些IP地址之間建立一個覆蓋網(wǎng)絡(Overlay Network),通過這個覆蓋網(wǎng)絡,將數(shù)據(jù)包原封不動地傳遞到目標容器內(nèi)。


Flavnel和ETCD之間的關聯(lián)

  • 存儲管理Flannel可分配的IP地址段資源
    Flannel啟動以后會向ETCD里插入可以被分配的網(wǎng)段,并且把那些網(wǎng)段分配給那些機器了都記錄上,防止已經(jīng)分配的網(wǎng)段再次被Flannel利用分配給其他的Node節(jié)點
  • 監(jiān)控ETCD中每個Pod的實際地址,并在內(nèi)存中建立維護Pod節(jié)點路由表

不同情況下網(wǎng)絡通信方式

同一個Pod內(nèi)部通訊:同一個Pod共享同一個網(wǎng)絡命名空間,共享同一個Linux協(xié)議棧
Pod1至Pod2

  • Pod1與Pod2不在同一臺主機,Pod的地址是與docker0在同一個網(wǎng)段的,但docker0網(wǎng)段與宿主機網(wǎng)卡是兩個完全不同的IP網(wǎng)段,并且不同Node之間的通信只能通過宿主機的物理網(wǎng)卡進行。將Pod的IP和所在Node的IP關聯(lián)起來,通過這個關聯(lián)讓Pod可以互相訪問。
  • Pod1與Pod2在同一臺機器,由docker0網(wǎng)橋直接轉(zhuǎn)發(fā)請求至Pod2,不需要經(jīng)過Flannel

Pod至Service的網(wǎng)絡:目前基于性能考慮,全部為iptables維護和轉(zhuǎn)發(fā)。最新版已經(jīng)完全可以由LVS進行轉(zhuǎn)發(fā)和維護。

Pod到外網(wǎng):Pod向外網(wǎng)發(fā)送請求,查找路由表,轉(zhuǎn)發(fā)數(shù)據(jù)包到宿主機的網(wǎng)卡,宿主網(wǎng)卡完成路由選擇后,iptables執(zhí)行Masquerade,把源IP更改為宿主網(wǎng)卡的IP,然后向外網(wǎng)服務器發(fā)送請求。

外網(wǎng)訪問Pod:Service

在Kuberbetes中,只有Node網(wǎng)絡是真實存在的,Pod以及Service網(wǎng)絡都是虛擬網(wǎng)絡

Kuberbetes組件通訊示意圖

參考:
https://www.cnblogs.com/fanqisoft/p/11492214.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容