<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          幾張圖徹底搞懂 Kubernetes 的底層網(wǎng)絡(luò)

          共 2299字,需瀏覽 5分鐘

           ·

          2021-11-09 12:31

          ????關(guān)注后回復(fù) “進(jìn)群” ,拉你進(jìn)程序員交流群????


          來(lái)源丨杰哥的IT之旅


          如果大家已經(jīng)使用了 kubernetes技術(shù),并運(yùn)行了一些測(cè)試或生產(chǎn)的服務(wù),可能已經(jīng)能體會(huì)到 K8s 技術(shù)帶來(lái)的革命性變化,如果還沒(méi)有用過(guò)的小伙伴,我建議盡快入坑,畢竟這是技術(shù)趨勢(shì)。

          目前盡管已經(jīng)有很多工具可以用來(lái)設(shè)置和管理集群,但我們?nèi)匀恍枰涝趉8s底層發(fā)生了什么,尤其在碰到問(wèn)題時(shí),只有知道到底層原理才有可能從某個(gè)現(xiàn)象去分析到底是哪里出了問(wèn)題,才能去解決實(shí)際問(wèn)題。

          從技術(shù)上說(shuō) Kubernetes 其實(shí)在底層它是非常復(fù)雜的,它有很多組件,因此,必須了解它們?nèi)绾蜗嗷ヅ浜喜f(xié)同工作,才能實(shí)際去理解實(shí)際中的問(wèn)題,那說(shuō)到這里,不得不說(shuō)K8s的網(wǎng)絡(luò)是最復(fù)雜且最關(guān)鍵之一。

          因此,這篇我們通過(guò)圖文來(lái)深入理解 Kubernetes 中的網(wǎng)絡(luò)如何工作。

          Kubernetes網(wǎng)絡(luò)模型

          Kubernetes Networking 的核心是一種重要的基本設(shè)計(jì)理念:

          每個(gè)Pod都有唯一的IP。

          此 Pod IP 由該P(yáng)od中的所有容器共享,并且可以與所有其他Pod路由。你是否曾經(jīng)注意到Kubernetes節(jié)點(diǎn)上運(yùn)行著一些“暫?!比萜??它們被稱為“沙盒容器”,其唯一的工作就是保留和保存由Pod中的所有容器共享的網(wǎng)絡(luò)名稱空間(netns)。這樣,即使容器死亡,并且在其位置創(chuàng)建了一個(gè)新容器,容器IP也不會(huì)改變。這種按單機(jī)IP模式的巨大好處是與基礎(chǔ)主機(jī)之間沒(méi)有IP或端口沖突。而且,我們不必?fù)?dān)心應(yīng)用程序使用哪個(gè)端口。

          有了這個(gè),Kubernetes 唯一的要求就是,這些Pod IP可以從其他所有Pod進(jìn)行路由/訪問(wèn),而不管它們位于哪個(gè)節(jié)點(diǎn)上。

          節(jié)點(diǎn)內(nèi)通信

          第一步是確保同一節(jié)點(diǎn)上的Pod能夠互相通信。然后將該思想擴(kuò)展到跨節(jié)點(diǎn),到Internet等的通信。

          在每個(gè)Kubernetes節(jié)點(diǎn)(在本例中為L(zhǎng)inux機(jī)器)上,都有一個(gè)根網(wǎng)絡(luò)名稱空間(根為基礎(chǔ),而不是超級(jí)用戶)-root netns。

          主網(wǎng)絡(luò)接口eth0在此根netns中。

          同樣,每個(gè)Pod都有其自己的網(wǎng)絡(luò),并且有一個(gè)虛擬以太網(wǎng)對(duì)將其連接到根網(wǎng)絡(luò)。這基本上是一個(gè)管道對(duì),一端在根網(wǎng)中,另一端在pod網(wǎng)中。

          我們將Pod-end命名為eth0,因此Pod不了解底層主機(jī),并認(rèn)為它具有自己的根網(wǎng)絡(luò)設(shè)置。另一端的名稱類似于vethxxx。

          可以使用ifconfig或ip a命令在節(jié)點(diǎn)上列出所有這些接口。

          對(duì)節(jié)點(diǎn)上的所有Pod完成此操作。為了使這些Pod相互通信,使用了Linux以太網(wǎng)橋cbr0。Docker使用了一個(gè)類似的橋,名為docker0。

          可以使用brctl show命令列出網(wǎng)橋。

          假設(shè)一個(gè)數(shù)據(jù)包從pod1到pod2。

          它將pod1的網(wǎng)絡(luò)保留在eth0處,并將根網(wǎng)絡(luò)保留在vethxxx。

          將其傳遞給cbr0,后者使用ARP請(qǐng)求發(fā)現(xiàn)目的地,并說(shuō)“誰(shuí)擁有此IP?”

          vethyyy說(shuō)它具有該IP,因此網(wǎng)橋知道將數(shù)據(jù)包轉(zhuǎn)發(fā)到何處。

          數(shù)據(jù)包到達(dá)vethyyy,穿過(guò)管道對(duì)并到達(dá)pod2的網(wǎng)絡(luò)。

          這就是節(jié)點(diǎn)上的容器相互通信的方式。顯然還有其他方法,但這可能是最簡(jiǎn)單的方法.

          節(jié)點(diǎn)間通訊

          正如之前提到的,pod也必須在節(jié)點(diǎn)之間可訪問(wèn)。Kubernetes并不關(guān)心它是如何完成的。我們可以使用L2(跨節(jié)點(diǎn)的ARP),L3(跨節(jié)點(diǎn)的IP路由-如云提供商路由表)覆蓋網(wǎng)絡(luò)。只要流量可以到達(dá)另一個(gè)節(jié)點(diǎn)上所需的Pod,這都沒(méi)有關(guān)系。每個(gè)節(jié)點(diǎn)都為Pod IP分配了唯一的CIDR塊(一系列IP地址),因此每個(gè)Pod具有一個(gè)唯一的IP,該IP與另一個(gè)節(jié)點(diǎn)上的Pod不沖突。

          在大多數(shù)情況下,尤其是在云環(huán)境中,云提供商路由表可確保數(shù)據(jù)包到達(dá)正確的目的地。通過(guò)在每個(gè)節(jié)點(diǎn)上設(shè)置正確的路由,可以完成同一件事。還有許多其他的網(wǎng)絡(luò)插件也可以發(fā)揮自己的作用。

          在這里,我們有兩個(gè)節(jié)點(diǎn),類似于我們之前看到的。每個(gè)節(jié)點(diǎn)都有各種網(wǎng)絡(luò)名稱空間,網(wǎng)絡(luò)接口和網(wǎng)橋。

          假設(shè)一個(gè)數(shù)據(jù)包從pod1到pod4(在另一個(gè)節(jié)點(diǎn)上)。

          它將pod1的網(wǎng)絡(luò)保留在eth0處,并將根網(wǎng)絡(luò)保留在vethxxx。

          它傳遞給cbr0,后者發(fā)出ARP請(qǐng)求以查找目的地。

          它從cbr0傳到主網(wǎng)絡(luò)接口eth0,因?yàn)榇斯?jié)點(diǎn)上沒(méi)有人具有pod4的IP地址。

          它將離開(kāi)node1,這時(shí)候src = pod1和dst = pod4。

          路由表具有為每個(gè)節(jié)點(diǎn)CIDR塊設(shè)置的路由,并且將數(shù)據(jù)包路由到其CIDR塊包含pod4 IP的節(jié)點(diǎn)。

          因此,數(shù)據(jù)包到達(dá)主網(wǎng)絡(luò)接口eth0的node2?,F(xiàn)在,即使pod4不是eth0的IP,由于已將節(jié)點(diǎn)配置為啟用IP轉(zhuǎn)發(fā),因此數(shù)據(jù)包仍轉(zhuǎn)發(fā)到cbr0。在節(jié)點(diǎn)的路由表中查找與pod4 IP匹配的所有路由。它找到cbr0作為此節(jié)點(diǎn)的CIDR塊的目標(biāo)??梢允褂胷oute -n命令列出節(jié)點(diǎn)路由表.

          橋接器接收數(shù)據(jù)包,發(fā)出ARP請(qǐng)求,然后發(fā)現(xiàn)IP屬于vethyyy。

          數(shù)據(jù)包穿過(guò)管道對(duì)并到達(dá)pod4

          以上就是Kubernetes網(wǎng)絡(luò)的基礎(chǔ)內(nèi)容,歡迎大家留言討論。

          本文源自網(wǎng)絡(luò),侵刪

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來(lái),可以說(shuō)是程序員面試必備!所有資料都整理到網(wǎng)盤(pán)了,歡迎下載!

          點(diǎn)擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點(diǎn)這里好文分享給更多人↓↓

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品一区二区亚洲AV观看 | 日本777视频 | 操逼欧美 | 日韩蜜臀电影二区 | 自拍偷拍电影网 |