日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Kubernetes研究:圖解Kubernetes網(wǎng)絡

Kubernetes研究:圖解Kubernetes網(wǎng)絡

作者:大數(shù)據(jù)技術(shù)實戰(zhàn) 2019-10-24 10:25:32

云計算 你一直在Kubernetes集群中運行一系列服務并已從中獲益,或者你正打算這么做。盡管有一系列工具能幫助你建立并管理集群,你仍困惑于集群底層是如何工作的,以及出現(xiàn)問題該如何處理。我曾經(jīng)就是這樣的。

創(chuàng)新互聯(lián)憑借專業(yè)的設計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務,在成都10年的網(wǎng)站建設設計經(jīng)驗,為成都1000多家中小型企業(yè)策劃設計了網(wǎng)站。

你一直在Kubernetes集群中運行一系列服務并已從中獲益,或者你正打算這么做。盡管有一系列工具能幫助你建立并管理集群,你仍困惑于集群底層是如何工作的,以及出現(xiàn)問題該如何處理。我曾經(jīng)就是這樣的。

[[280112]]

誠然Kubernetes對初學者來說已足夠易用,但我們?nèi)匀徊坏貌怀姓J,它的底層實現(xiàn)異常復雜。Kubernetes由許多部件組成,如果你想對失敗場景做好應對準備,那么你必須知道各部件是如何協(xié)調(diào)工作的。其中一個最復雜,甚至可以說是最關鍵的部件就是網(wǎng)絡。因此我著手精確理解Kubernetes網(wǎng)絡是如何工作的。我閱讀了許多文章,看了很多演講,甚至瀏覽了代碼庫。以下就是我的所得。

Kubernetes網(wǎng)絡模型核心點是,Kubernetes網(wǎng)絡有一個重要的基本設計原則:每個Pod擁有唯一的IP。這個Pod IP被該Pod內(nèi)的所有容器共享,并且其它所有Pod都可以路由到該Pod。你可曾注意到,你的Kubernetes節(jié)點上運行著一些"pause"容器?

它們被稱作“沙盒容器(sandbox containers)",其唯一任務是保留并持有一個網(wǎng)絡命名空間(netns),該命名空間被Pod內(nèi)所有容器共享。

通過這種方式,即使一個容器死掉,新的容器創(chuàng)建出來代替這個容器,Pod IP也不會改變。這種IP-per-pod模型的巨大優(yōu)勢是,Pod和底層主機不會有IP或者端口沖突。我們不用擔心應用使用了什么端口。這點滿足后,Kubernetes唯一的要求是,這些Pod IP可被其它所有Pod訪問,不管那些Pod在哪個節(jié)點。

節(jié)點內(nèi)通信第一步是確保同一節(jié)點上的Pod可以相互通信,然后可以擴展到跨節(jié)點通信、internet上的通信,等等。

[[280113]]

Kubernetes Node(root network namespace)在每個Kubernetes節(jié)點(本場景指的是Linux機器)上,都有一個根(root)命名空間(root是作為基準,而不是超級用戶)--root netns。最主要的網(wǎng)絡接口 eth0 就是在這個root netns下。

Kubernetes Node(pod network namespace)類似的,每個Pod都有其自身的netns,通過一個虛擬的以太網(wǎng)對連接到root netns。這基本上就是一個管道對,一端在root netns內(nèi),另一端在Pod的nens內(nèi)。我們把Pod端的網(wǎng)絡接口叫 eth0,這樣Pod就不需要知道底層主機,它認為它擁有自己的根網(wǎng)絡設備。另一端命名成比如 vethxxx。你可以用ifconfig 或者 ip a 命令列出你的節(jié)點上的所有這些接口。

Kubernetes Node(linux network bridge)節(jié)點上的所有Pod都會完成這個過程。這些Pod要相互通信,就要用到linux的以太網(wǎng)橋 cbr0 了。Docker使用了類似的網(wǎng)橋,稱為docker0。你可以用 brctl show 命令列出所有網(wǎng)橋。

Kubernetes Node(same node pod-to-pod communication)假設一個網(wǎng)絡數(shù)據(jù)包要由pod1到pod2。

它由pod1中netns的eth0網(wǎng)口離開,通過vethxxx進入root netns。

然后被傳到cbr0,cbr0使用ARP請求,說“誰擁有這個IP”,從而發(fā)現(xiàn)目標地址。

vethyyy說它有這個IP,因此網(wǎng)橋就知道了往哪里轉(zhuǎn)發(fā)這個包。

數(shù)據(jù)包到達vethyyy,跨過管道對,到達pod2的netns。這就是同一節(jié)點內(nèi)容器間通信的流程。

當然也可以用其它方式,但是無疑這是最簡單的方式,同時也是Docker采用的方式。節(jié)點間通信正如我前面提到,Pod也需要跨節(jié)點可達。Kubernetes不關心如何實現(xiàn)。我們可以使用L2(ARP跨節(jié)點),L3(IP路由跨節(jié)點,就像云提供商的路由表),Overlay網(wǎng)絡,或者甚至信鴿。無所謂,只要流量能到達另一個節(jié)點的期望Pod就好。每個節(jié)點都為Pod IPs分配了唯一的CIDR塊(一段IP地址范圍),因此每個Pod都擁有唯一的IP,不會和其它節(jié)點上的Pod沖突。大多數(shù)情況下,特別是在云環(huán)境上,云提供商的路由表就能確保數(shù)據(jù)包到達正確的目的地。我們在每個節(jié)點上建立正確的路由也能達到同樣的目的。許多其它的網(wǎng)絡插件通過自己的方式達到這個目的。

這里我們有兩個節(jié)點,與之前看到的類似。每個節(jié)點有不同的網(wǎng)絡命名空間、網(wǎng)絡接口以及網(wǎng)橋。

Kubernetes Nodes with route table(cross node pod-to-pod communication)假設一個數(shù)據(jù)包要從pod1到達pod4(在不同的節(jié)點上)。它由pod1中netns的eth0網(wǎng)口離開,通過vethxxx進入root netns。然后被傳到cbr0,cbr0通過發(fā)送ARP請求來找到目標地址。

本節(jié)點上沒有Pod擁有pod4的IP地址,因此數(shù)據(jù)包由cbr0 傳到 主網(wǎng)絡接口 eth0。數(shù)據(jù)包的源地址為pod1,目標地址為pod4,它以這種方式離開node1進入電纜。路由表有每個節(jié)點的CIDR塊的路由設定,它把數(shù)據(jù)包路由到CIDR塊包含pod4的IP的節(jié)點。因此數(shù)據(jù)包到達了node2的主網(wǎng)絡接口eth0?,F(xiàn)在即使pod4不是eth0的IP,數(shù)據(jù)包也仍然能轉(zhuǎn)發(fā)到cbr0,因為節(jié)點配置了IP forwarding enabled。節(jié)點的路由表尋找任意能匹配pod4 IP的路由。它發(fā)現(xiàn)了 cbr0 是這個節(jié)點的CIDR塊的目標地址。你可以用route -n命令列出該節(jié)點的路由表,它會顯示cbr0的路由,類型如下:

網(wǎng)橋接收了數(shù)據(jù)包,發(fā)送ARP請求,發(fā)現(xiàn)目標IP屬于vethyyy。數(shù)據(jù)包跨過管道對到達pod4。這就是Kubernetes網(wǎng)絡的基礎。下次你碰到問題,務必先檢查這些網(wǎng)橋和路由表。前面我們漫談了Kubernetes的網(wǎng)絡模型。

我們觀察了數(shù)據(jù)包是如何在同一節(jié)點上的pod 間和跨節(jié)點的 pod 間流動的。我們也注意到了Linux網(wǎng)橋和路由表在這個過程中所扮演的角色?,F(xiàn)在我們將進一步闡述這些概念,并闡述Overlay網(wǎng)絡是如何工作的。我們也將理解Kubernetes千變?nèi)f化的Pod是如何從運行的應用中抽象出來,并在幕后處理的。

Overlay 網(wǎng)絡Overlay網(wǎng)絡不是默認必須的,但是它們在特定場景下非常有用。比如當我們沒有足夠的IP空間,或者網(wǎng)絡無法處理額外路由,抑或當我們需要Overlay提供的某些額外管理特性。一個常見的場景是當云提供商的路由表能處理的路由數(shù)是有限制時。例如,AWS路由表最多支持50條路由才不至于影響網(wǎng)絡性能。因此如果我們有超過50個Kubernetes節(jié)點,AWS路由表將不夠。這種情況下,使用Overlay網(wǎng)絡將幫到我們。

本質(zhì)上來說,Overlay就是在跨節(jié)點的本地網(wǎng)絡上的包中再封裝一層包。你可能不想使用Overlay網(wǎng)絡,因為它會帶來由封裝和解封所有報文引起的時延和復雜度開銷。通常這是不必要的,因此我們應當在知道為什么我們需要它時才使用它。

為了理解Overlay網(wǎng)絡中流量的流向,我們拿Flannel做例子,它是CoreOS 的一個開源項目。

Kubernetes Node with route table(cross node pod-to-pop Traffic flow with flannel overlay network)這里我們注意到它和之前我們看到的設施是一樣的,只是在root netns中新增了一個虛擬的以太網(wǎng)設備,稱為flannel0。它是虛擬擴展網(wǎng)絡Virtual Extensible LAN(VXLAN)的一種實現(xiàn),但是在Linux上,它只是另一個網(wǎng)絡接口。從pod1到pod4(在不同節(jié)點)的數(shù)據(jù)包的流向類似如下:

1、它由pod1中netns的eth0網(wǎng)口離開,通過vethxxx進入root netns。

2、然后被傳到cbr0,cbr0通過發(fā)送ARP請求來找到目標地址。

3

  • a、由于本節(jié)點上沒有Pod擁有pod4的IP地址,因此網(wǎng)橋把數(shù)據(jù)包發(fā)送給了flannel0,因為節(jié)點的路由表上flannel0被配成了Pod網(wǎng)段的目標地址。
  • b、flanneld daemon和Kubernetes apiserver或者底層的etcd通信,它知道所有的Pod IP,并且知道它們在哪個節(jié)點上。因此Flannel創(chuàng)建了Pod IP和Node IP之間的映射(在用戶空間)。flannel0取到這個包,并在其上再用一個UDP包封裝起來,該UDP包頭部的源和目的IP分別被改成了對應節(jié)點的IP,然后發(fā)送這個新包到特定的VXLAN端口(通常是8472)。

 

  • Packet-in-packet encapsulation(notice the packet is encapsulated from 3c to 6b in previous diagram)盡管這個映射發(fā)生在用戶空間,真實的封裝以及數(shù)據(jù)的流動發(fā)生在內(nèi)核空間,因此仍然是很快的。
  • c、封裝后的包通過eth0發(fā)送出去,因為它涉及了節(jié)點間的路由流量。

4、包帶著節(jié)點IP信息作為源和目的地址離開本節(jié)點。

5、云提供商的路由表已經(jīng)知道了如何在節(jié)點間發(fā)送報文,因此該報文被發(fā)送到目標地址node2。

6

  • a、包到達node2的eth0網(wǎng)卡,由于目標端口是特定的VXLAN端口,內(nèi)核將報文發(fā)送給了 flannel0。
  • b、flannel0解封報文,并將其發(fā)送到 root 命名空間下。從這里開始,報文的路徑和我們之前在Part 1 中看到的非Overlay網(wǎng)絡就是一致的了。
  • c、由于IP forwarding開啟著,內(nèi)核按照路由表將報文轉(zhuǎn)發(fā)給了cbr0。

7、網(wǎng)橋獲取到了包,發(fā)送ARP請求,發(fā)現(xiàn)目標IP屬于vethyyy。

8、包跨過管道對到達pod4。這就是Kubernetes中Overlay網(wǎng)絡的工作方式,雖然不同的實現(xiàn)還是會有細微的差別。有個常見的誤區(qū)是,當我們使用Kubernetes,我們就不得不使用Overlay網(wǎng)路。事實是,這完全依賴于特定場景。因此請確保在確實需要的場景下才使用。在前一部分我們學習了Kubernetes網(wǎng)絡的基礎知識。現(xiàn)在我們知道了Overlay網(wǎng)絡是如何工作的。在下一部分,我們將看到Pod創(chuàng)建和刪除過程中網(wǎng)絡變化是如何發(fā)生的,以及出站和進站流量是如何流動的。

總體而言我對網(wǎng)絡概念仍然是個新手,因此我非常期待能得到大家的反饋,特別是某些不清晰或者錯誤的地方。


分享文章:Kubernetes研究:圖解Kubernetes網(wǎng)絡
網(wǎng)頁地址:http://m.5511xx.com/article/cocchie.html