當前位置:網站首頁>【Devops】kubernetes網絡

【Devops】kubernetes網絡

2022-05-14 08:31:57curd_boy

k8s網絡模型

Kubernetes 的網絡利用了 Docker 的網絡原理,並在此基礎上實現了跨 Node 容器間的網絡通信。

在這裏插入圖片描述

Kubernetes之POD、容器之間的網絡通信

同一節點

在這裏插入圖片描述
三個網絡設備:
eth0: 節點主機網卡
docker0: docker網橋
veth0: 虛擬網卡

同一個POD上Container通信

在k8s中每個Pod中管理著一組Docker容器,這些Docker容器共享同一個網絡命名空間,Pod中的每個Docker容器擁有與Pod相同的IP和port地址空間,並且由於他們在同一個網絡命名空間,他們之間可以通過localhost相互訪問。

什麼機制讓同一個Pod內的多個docker容器相互通信?就是使用Docker的一種網絡模型:–net=container

container模式指定新創建的Docker容器和已經存在的一個容器共享一個網絡命名空間,而不是和宿主機共享。新創建的Docker容器不會創建自己的網卡,配置自己的 IP,而是和一個指定的容器共享 IP、端口範圍等

在k8s中每個Pod容器有一個pause容器有獨立的網絡命名空間,在Pod內啟動Docker容器時候使用 –net=container就可以讓當前Docker容器加入到Pod容器擁有的網絡命名空間(pause容器)

這裏就是為什麼k8s在調度pod時,盡量把關系緊密的服務放到一個pod中,這樣網絡的請求耗時就可以忽略,因為容器之間通信共享了網絡空間,就像local本地通信一樣。

同一個 Node 下 不同Pod 間通信模型:

pod與pod之間的網絡:首先pod自身擁有一個IP地址,不同pod之間直接使用IP地址進行通信即可

如容器⽹絡模型⼀樣,對於同⼀主機上的 pod 之間,通過 docker0 ⽹橋設備直接⼆層(數據鏈路層)⽹絡上通過 MAC 地址直接通信:

在這裏插入圖片描述

pod1–>pod2(同一臺node上),pod1通過自身eth0網卡發送數據,eth0連接著veth0,網橋把veth0和veth1組成了一個以太網,然後數據到達veth0之後,網橋通過轉發錶,發送給veth1,veth1直接把數據傳給pod2的eth0。

不同pod之間的通信,就是使用linux虛擬以太網設備或者說是由兩個虛擬接口組成的veth對使不同的網絡命名空間鏈接起來,這些虛擬接口分布在多個網絡命名空間上(這裏是指多個Pod上)。

通過網橋把veth0和veth1組成為一個以太網,他們直接是可以直接通信的,另外這裏通過veth對讓pod1的eth0和veth0、pod2的eth0和veth1關聯起來,從而讓pod1和pod2相互通信。

不同一節點

常見k8S容器互通網絡方案就是兩種,路由模式和覆蓋網絡overlay 隧道模式

在這裏插入圖片描述

不同node節點上pod和pod通信

上圖就是不同node之間的pod通信,Node1中的Pod1如何和Node2的Pod4進行通信的,我們來看看具體流程:

1)首先pod1通過自己的以太網設備eth0把數據包發送到關聯到root命名空間的veth0上

2)然後數據包被Node1上的網橋設備(dcoker0)接收到,網橋查找轉發錶發現找不到pod4的Mac地址,則會把包轉發到默認路由(root命名空間的eth0設備)

3)然後數據包經過eth0(主機網卡)就離開了Node1,被發送到網絡。

4)數據包到達Node2後,首先會被root命名空間的eth0設備

5)然後通過網橋把數據路由到虛擬設備veth1,最終數據錶會被流轉到與veth1配對的另外一端(pod4的eth0)

每個Node都知道如何把數據包轉發到其內部運行的Pod,當一個數據包到達Node後,其內部數據流就和Node內Pod之間的流轉類似了

在這裏插入圖片描述

k8s網絡接口 CNI

在這裏插入圖片描述

在這裏插入圖片描述

  • Overlay 模式的典型特征是容器獨⽴於主機的 IP 段,這個 IP 段進⾏跨主機⽹絡通信時是通過在主機之間創建隧道的⽅式,將整個容器⽹段的包全都封裝成底層的物理⽹絡中主機之間的包。該⽅式的好處在於它不依賴於底層⽹絡;
  • 路由模式中主機和容器也分屬不同的⽹段,它與 Overlay 模式的主要區別在於它的跨主機通信是通過路由打通,⽆需在不同主機之間
    做⼀個隧道封包。但路由打通就需要部分依賴於底層⽹絡,⽐如說要求底層⽹絡有⼆層可達的⼀個能⼒;
  • Underlay 模式中容器和宿主機比特於同⼀層⽹絡,兩者擁有相同的地比特。容器之間⽹絡的打通主要依靠於底層⽹絡。因此該模式是强依賴於底層能⼒的。

路由網絡

在這裏插入圖片描述

修改主機路由:把容器⽹絡加到主機路由錶中,把主機⽹絡設備當作容器⽹關,通過路由規則轉發到指定的主機,實現容器的三層互通。

⽬前通過路由技術實現容器跨主機通信的⽹絡如 Flannel host-gw、Calico 等

覆蓋網絡

在這裏插入圖片描述

隧道傳輸(overlay):將容器的數據包封裝到原主機⽹絡的三層或者四層數據包中,然後使⽤主機⽹絡的 IP 或者 TCP/UDP 傳輸到⽬標主機,⽬標主機拆包後再轉發給⽬標容器。overlay 隧道傳輸常見⽅案包括 Vxlan、ipip 等,⽬前使⽤ overlay 隧道傳輸技術的主流容器⽹絡有 Flannel 等;

pod與service之間的網絡

pod的ip地址是不持久的,當集群中pod的規模縮减或者pod故障或者node故障重啟後,新的pod的ip就可能與之前的不一樣的。所以k8s中衍生出來Service來解决這個問題。

Service管理了多個Pods,每個Service有一個虛擬的ip,要訪問service管理的Pod上的服務只需要訪問你這個虛擬ip就可以了,這個虛擬ip是固定的,當service下的pod規模改變、故障重啟、node重啟時候,對使用service的用戶來說是無感知的,因為他們使用的service的ip沒有變。

當數據包到達Service虛擬ip後,數據包會被通過k8s給該servcie自動創建的負載均衡器路由到背後的pod容器。

在k8s裏,iptables規則是由kube-proxy配置,kube-proxy監視APIserver的更改,因為集群中所有service(iptables)更改都會發送到APIserver上,所以每臺kubelet-proxy監視APIserver,當對service或pod虛擬IP進行修改時,kube-proxy就會在本地更新,以便正確發送給後端pod

阿裏雲k8s

k8s信息
在這裏插入圖片描述

在pod內訪問 ecs自建數據庫

ECS的安全組 放行一下 內網的pod 和vpc的網段
10.0.0.0/8
192.168.0.0/16

在這裏插入圖片描述

在這裏插入圖片描述

在pod內測試結果, 內網可以訪問:

/data # ping 192.168.0.63
PING 192.168.0.63 (192.168.0.63): 56 data bytes
64 bytes from 192.168.0.63: seq=0 ttl=63 time=0.379 ms
64 bytes from 192.168.0.63: seq=1 ttl=63 time=0.290 ms
64 bytes from 192.168.0.63: seq=2 ttl=63 time=0.294 ms
64 bytes from 192.168.0.63: seq=3 ttl=63 time=0.294 ms
64 bytes from 192.168.0.63: seq=4 ttl=63 time=0.321 ms

版權聲明
本文為[curd_boy]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/134/202205140712302257.html

隨機推薦