成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

網絡 通信技術
Kubernetes(簡稱K8S)是開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基于容器技術的分布式架構領先方案。

[[332340]]

前言

Kubernetes(簡稱K8S)是開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基于容器技術的分布式架構領先方案。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等功能,提高了大規模容器集群管理的便捷性。

基礎概念

Container

Container(容器)是一種便攜式、輕量級的操作系統級虛擬化技術。它使用 NameSpace 隔離不同的軟件運行環境,并通過鏡像自包含軟件的運行環境,從而使得容器可以很方便的在任何地方運行。由于容器體積小且啟動快,因此可以在每個容器鏡像中打包一個應用程序。一對一的關系

POD

Kubernetes 使用 Pod 來管理容器,每個 Pod 可以包含一個或多個緊密關聯的容器。一對多的關系

 

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

 

Node

Node 是 Pod 真正運行的主機,可以是物理機,也可以是虛擬機,也稱為宿主機。為了管理 Pod,每個 Node 節點上至少要運行docker 、kubelet 服務。

 

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

 

Namespace

Namespace 是對一組資源和對象的抽象集合,比如可以用來將系統內部的對象劃分為不同的項目組或用戶組。常見的 pods, services, replication controllers 和 deployments 等都是屬于某一個 namespace 的(默認是 default),而 node, persistentVolumes 等則不屬于任何 namespace

Service

Service 是應用服務的抽象,通過 labels 為應用提供負載均衡和服務發現。匹配 labels 的 Pod IP 和端口列表組成 endpoints,由 kube-proxy 負責將服務 IP 負載均衡到這些 endpoints 上

網絡通訊方式

了解了上面的基本概念后,我們考慮一下K8s集群中docker容器之間是如何通訊的?我們這里需要區分一下不同的場景

1)在同一個POD上Container通信

2)同一個Node,不同POD

3)不同Node,不同POD

我們先來看看上面的不同場景是怎么通信的

同一個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容器)

 

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

 

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

同一個Node,不同Pod

 

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

 

 

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

 

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

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

不同Node,不同Pod

 

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

 

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

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

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

3)然后數據包經過eth0就離開了Node1,被發送到網絡。

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

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

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

補充說明:對于如何來配置網絡,k8s在網絡這塊自身并沒有實現網絡規劃的具體邏輯,而是制定了一套CNI(Container Network Interface)接口規范,開放給社區來實現。Flannel就是k8s中比較出名的一個。

flannel

flannel組建一個大二層扁平網絡,pod的ip分配由flannel統一分配,通訊過程也是走flannel的網橋。

每個node上面都會創建一個flannel0虛擬網卡,用于跨node之間通訊。所以容器直接可以直接使用pod id進行通訊。

跨節點通訊時,發送端數據會從docker0路由到flannel0虛擬網卡,接收端數據會從flannel0路由到docker0。

總結

 

上面老顧介紹了幾種網絡通信的場景,以及他們的通信流程,k8s的網絡通信遠遠不止這些,還有很重要的集群外如何訪問集群內部?以及Service訪問是用來做什么的?

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-11-20 09:15:53

KubernetesPod

2022-12-05 09:25:17

Kubernetes網絡模型網絡通信

2019-04-29 10:26:49

TCP網絡協議網絡通信

2022-05-13 10:59:14

容器網絡通信

2014-09-16 17:00:02

UDP

2024-02-20 19:53:57

網絡通信協議

2019-09-25 08:25:49

RPC網絡通信

2021-06-28 10:20:31

網絡技術Kubernetes通信

2020-11-12 08:52:16

Python

2022-04-02 08:14:25

K8s容器通信方案云原生

2019-08-29 14:46:15

Kubernetes網絡通信

2009-08-24 17:20:13

C#網絡通信TCP連接

2021-11-22 08:00:00

Kubernetes容器集群

2010-06-14 19:13:28

網絡通信協議

2021-08-13 11:27:25

網絡通信數據

2010-06-09 11:57:42

網絡通信協議

2010-06-29 10:15:31

局域網故障

2010-07-01 15:45:22

網絡通信協議

2017-01-15 17:44:56

node網絡通信Socket

2025-04-17 01:44:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美国产亚洲一区二区 | 亚洲一区二区久久久 | 中文字幕三区 | 婷婷午夜天 | 2020天天操 | 少妇久久久久 | 日韩在线观看一区 | jlzzjlzz欧美大全 | 午夜视频在线视频 | 精品1区| 91久操视频 | 精品国产乱码久久久久久丨区2区 | 日本精品一区二区三区在线观看视频 | 国产精品日产欧美久久久久 | 99re视频精品 | 一区二区日本 | 伊人爽| 国产精品毛片无码 | 亚洲国产中文字幕 | 久久综合伊人 | 在线观看www高清视频 | 久久精品久久久久久 | 一级黄色毛片免费 | 一区中文字幕 | 国产精品美女 | 涩涩导航 | 亚洲一区二区在线播放 | 午夜影院在线免费观看视频 | 国产精品一区二区在线免费观看 | 欧美成人免费在线视频 | 亚洲免费片 | 日韩二 | 午夜日韩 | 日韩欧美精品一区 | 青青草一区二区三区 | 91在线免费视频 | 国产无套一区二区三区久久 | 久久精品一级 | 国产一区 | 美女久久视频 | av在线一区二区三区 |