亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

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

理解了 k8s 底層網(wǎng)絡(luò)模型和技術(shù),對設(shè)計容器服務(wù)網(wǎng)絡(luò)拓?fù)鋾苡袔椭?,本文介紹了 k8s 網(wǎng)絡(luò)技術(shù)。

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

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

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

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

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

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

每一個Pod都有唯一的ip

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 它將pod1的網(wǎng)絡(luò)保留在eth0處,并將根網(wǎng)絡(luò)保留在vethxxx。
  2. 將其傳遞給cbr0,后者使用ARP請求發(fā)現(xiàn)目的地,并說“誰擁有此IP?”
  3. vethyyy說它具有該IP,因此網(wǎng)橋知道將數(shù)據(jù)包轉(zhuǎn)發(fā)到何處。
  4. 數(shù)據(jù)包到達(dá)vethyyy,穿過管道對并到達(dá)pod2的網(wǎng)絡(luò)。

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

 

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

節(jié)點間通訊

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

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

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

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

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

  1. 它將pod1的網(wǎng)絡(luò)保留在eth0處,并將根網(wǎng)絡(luò)保留在vethxxx。
  2. 它傳遞給cbr0,后者發(fā)出ARP請求以查找目的地。
  3. 它從cbr0傳到主網(wǎng)絡(luò)接口eth0,因為此節(jié)點上沒有人具有pod4的IP地址。
  4. 它將離開node1,這時候src = pod1和dst = pod4。
  5. 路由表具有為每個節(jié)點CIDR塊設(shè)置的路由,并且將數(shù)據(jù)包路由到其CIDR塊包含pod4 IP的節(jié)點。
  6. 因此,數(shù)據(jù)包到達(dá)主網(wǎng)絡(luò)接口eth0的node2。現(xiàn)在,即使pod4不是eth0的IP,由于已將節(jié)點配置為啟用IP轉(zhuǎn)發(fā),因此數(shù)據(jù)包仍轉(zhuǎn)發(fā)到cbr0。在節(jié)點的路由表中查找與pod4 IP匹配的所有路由。它找到cbr0作為此節(jié)點的CIDR塊的目標(biāo)??梢允褂胷oute -n命令列出節(jié)點路由表.
  7. 橋接器接收數(shù)據(jù)包,發(fā)出ARP請求,然后發(fā)現(xiàn)IP屬于vethyyy。
  8. 數(shù)據(jù)包穿過管道對并到達(dá)pod4

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

 

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!