色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

各種網絡組件在 Kubernetes 集群中是如何交互的

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-05-23 09:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Kubernetes 網絡模型的核心要求之一是每個 Pod 都擁有自己的 IP 地址并可以使用該 IP 地址進行通信。很多人剛開始使用 Kubernetes 時,還不清楚如何為每個 Pod 分配 IP 地址。他們了解各種組件如何獨立工作,但不清楚這些組件如何組合在一起使用。例如,他們了解什么是 CNI 插件,但是不知道它們是如何被調用的。本文就介紹了各種網絡組件在 Kubernetes 集群中是如何交互的,以及如何幫助每個 Pod 都獲取 IP 地址。

在 Kubernetes 中有多種網絡設置方法,以及 container runtime 的各種選項。這篇文章將使用 Flannel 作為network provider,并使用 Containered 作為 container runtime。

背景概念

容器網絡 同一主機上的容器 在同一主機上運行的容器通過 IP 地址相互通信的方法之一是使用 Linux Bridge,即在 Kubernetes(和 Docker)世界中,創建 veth(虛擬以太網)設備。該 veth 設備的一端連接在容器網絡命名空間,另一端連接到主機網絡上的 Linux Bridge。同一主機上的所有容器都將這 veth pair 的一端連接到 Linux Bridge,它們可以通過 Bridge 使用 IP 地址相互通信。Linux Bridge 也被分配了一個 IP 地址,它充當從目的地到不同節點的 Pod 流出流量的網關。

2c0686b0-f8f4-11ed-90ce-dac502259ad0.png

不同主機上的容器 在不同主機上運行的容器可以通過其 IP 地址相互通信的方式之一是使用數據包封裝(packet encapsulation)。Flannel 通過 vxlan 使用該功能,vxlan 將原始數據包封裝在 UDP 數據包中并將其發送到目的地。 在 Kubernetes 集群中,Flannel 會在每個節點上創建一個 vxlan 設備和一些路由表。每個發往不同主機上的容器的數據包都會通過 vxlan 設備,并封裝在 UDP 數據包中。在目標位置,它會提取封裝的數據包,然后將數據包路由到目的地 Pod。

2c357808-f8f4-11ed-90ce-dac502259ad0.png

注意:這只是配置容器之間網絡的方法之一。

CRI CRI(容器運行時接口)是一個插件接口,允許 kubelet 使用不同的 container runtimes。各種 container runtimes 都實現了 CRI API,這使用戶可以在 Kubernetes 安裝中使用他們想要的 container runtimes。 CNI

CNI(容器網絡接口)項目包含一個為 Linux 容器提供基于通用插件網絡解決方案的規則。它由各種插件組成,這些插件在配置 Pod 網絡時執行不同的功能。CNI 插件是遵循 CNI 規范的可執行文件。

為節點子網分配 Pod IP 地址

如果要求所有 Pod 具有 IP 地址,那么就要確保整個集群中的所有 Pod 的 IP 地址是唯一的。這可以通過為每個節點分配一個唯一的子網來實現,即從子網中為 Pod 分配節點 IP 地址。

節點 IPAM 控制器 當nodeipam傳遞給 kube-controller-manager 的--controllers命令行標志時,它將為每個節點分配來自集群 CIDR(集群網絡的 IP 范圍)的專用子網(podCIDR)。由于這些 podCIDR 是不相交的子網,因此它可以為每個 Pod 分配唯一的 IP 地址。 當 Kubernetes 節點首次在集群上注冊時,會被分配一個 podCIDR。要更改分配給集群中節點的 podCIDR,需要先注銷節點,然后使用應用于 Kubernetes 控制平面的任何配置更改來重新注冊節點。podCIDR可以使用以下命令列出節點的名稱:

2c4821b0-f8f4-11ed-90ce-dac502259ad0.jpg

Kubelet、Container Runtime 和 CNI 插件交互

當在節點上調度 Pod 時,一啟動 Pod 就會發生很多事情。這里我們僅關注與 Pod 配置網絡有關的動態。一旦在節點上調度了 Pod,將配置網絡并啟動應用程序容器。

2c644732-f8f4-11ed-90ce-dac502259ad0.png

參考:容器式 cri 插件架構 Container Runtime 與 CNI 插件的交互 每個 network provider 都有一個 CNI 插件,container runtime 會調用該插件,在 Pod 啟動時配置網絡。使用容器化作為 container runtime,容器化 CRI 插件將調用 CNI 插件。每個 network provider 都在每個 Kubernetes 節點上安裝了一個代理,以配置 Pod 網絡。安裝 network provider agent 后,它會隨 CNI 一起配置或者在節點上創建,CRI 插件會使用它來確定要調用哪個 CNI 插件。 CNI 配置文件的位置是可配置的,默認值為/etc/cni/net.d/。集群管理員需要在每個節點上交付 CNI 插件。CNI 插件的位置也是可配置的,默認值為/opt/cni/bin。 如果使用 containerd 作為 container runtime,則可以在 containerd config 部分下[plugins."io.containerd.grpc.v1.cri".cni]指定 CNI 配置和 CNI 插件的路徑。 本文中我們將 Flannel 作為 network provider,這里簡單介紹一下 Flannel 的設置。Flanneld 是 Flannel 守護程序,通常 install-cni 作為帶有初始化容器的守護程序安裝在 Kubernetes 集群上。install-cni 容器創建 CNI 配置文件在每個節點上/etc/cni/net.d/10-flannel.conflist。Flanneld 創建一個 vxlan 設備,從 apiserver 獲取網絡元數據,并監控 Pod 上的更新。創建 Pod 時,它將在整個集群中為所有 Pod 分配路由,這些路由允許 Pod 通過 IP 地址相互連接。 Containerd CRI 插件和 CNI 插件之間的交互可以如下所示:

2c98faa4-f8f4-11ed-90ce-dac502259ad0.png

如上所述,kubelet 調用 Containered CRI 插件創建容器,再調用 CNI 插件為容器配置網絡。Network provider CNI 插件調用其他基本 CNI 插件來配置網絡。CNI 插件之間的交互如下所述。 CNI 插件之間的交互 有多種 CNI 插件可幫助配置主機上容器之間的網絡,本文主要討論以下 3 個插件。 Flannel CNI 插件 當使用 Flannel 作為network provider時,Containered CRI 插件使用 CNI 配置文件,調用 Flannel CNI 插件:/etc/cni/net.d/10-flannel.conflist。

2cb58480-f8f4-11ed-90ce-dac502259ad0.jpg

Fannel CNI 插件與 Flanneld 結合使用,當 Flanneld 啟動時,它將從 apiserver 中獲取 podCIDR和其他與網絡相關的詳細信息,并將它們存儲在文件中/run/flannel/subnet.env。

2cd00404-f8f4-11ed-90ce-dac502259ad0.jpg

Flannel CNI 插件使用/run/flannel/subnet.env的信息來配置和調用 Bridge CNI 插件。 Bridge CNI 插件 Flannel CNI 插件使用以下配置調用 Bridge CNI 插件:

2cdb8fae-f8f4-11ed-90ce-dac502259ad0.jpg

當 Bridge CNI 插件第一次調用時,它會創建一個 Linux Bridge"name": "cni0"在配置文件中,然后為每個 Pod 創建 veth pair,其一端在容器的網絡命名空間中,另一端連接到主機網絡上的 Linux Bridge。使用 Bridge CNI 插件,主機上的所有容器都連接到主機網絡上的 Linux Bridge。 配置完 veth pair 后,Bridge 插件將調用主機本地 IPAM CNI 插件。我們可以在 CNI config 中配置要使用的 IPAM 插件,CRI 插件用于調用 Flannel CNI插件。 主機本地 IPAM CNI 插件 Bridge CNI 插件使用以下配置調用主機本地 IPAM CNI 插件:

2cf1609a-f8f4-11ed-90ce-dac502259ad0.jpg

主機本地 IPAM(IP 地址管理)插件從中返回容器的 IP 地址,subnet將分配的 IP 本地存儲在主機下dataDir指定的目錄中 /var/lib/cni/networks// /var/lib/cni/networks//文件包含 IP 分配到的容器 ID。 調用時,主機本地 IPAM 插件返回以下有效負載: 2d136866-f8f4-11ed-90ce-dac502259ad0.jpg

總結

Kube-controller-manager 為每個節點分配一個 podCIDR。從 podCIDR 中的子網值為節點上的 Pod 分配了 IP 地址。由于所有節點上的 podCIDR 是不相交的子網,因此它允許為每個 pod 分配唯一的IP地址。

Kubernetes 集群管理員可配置和安裝 kubelet、container runtime、network provider,并在每個節點上分發 CNI 插件。Network provider agent 啟動時,將生成 CNI 配置。在節點上調度 Pod 后,kubelet 會調用 CRI 插件來創建 Pod。在容器情況下,容器的 CRI 插件調用 CNI 配置中指定的 CNI 插件來配置 Pod 網絡。所有這些都會影響 Pod 獲取 IP地址。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11515

    瀏覽量

    213963
  • 容器
    +關注

    關注

    0

    文章

    511

    瀏覽量

    22476
  • kubernetes
    +關注

    關注

    0

    文章

    245

    瀏覽量

    9082

原文標題:Kubernetes Pod 是如何獲取 IP 地址的?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    阿里云上Kubernetes集群聯邦

    規模的上限等等。Federation集群聯邦可以一定程度上解決這些問題。Federation是可以將分布多個Region或者多個云廠商的Kubernetes集群整合成一個大的
    發表于 03-12 17:10

    kubernetes集群配置

    基于v1104版本手動搭建高可用kubernetes 集群
    發表于 08-19 08:07

    Kubernetes 從懵圈到熟練:集群服務的三個要點和一種實現

    通信員。熟悉服務網格的同學肯定對這個很熟悉了。但是可能比較少人注意到,其實 Kubernetes 集群原始服務的實現,也是基于 Sidecar 模式的。 Kubernetes
    發表于 09-24 15:35

    請問鴻蒙系統上可以部署kubernetes集群嗎?

    鴻蒙系統上可以部署kubernetes集群
    發表于 06-08 11:16

    如何部署基于Mesos的Kubernetes集群

    的內核。把Kubernetes運行在Mesos集群之上,可以和其他的框架共享集群資源,提高集群資源的利用率。 本文是Kubernetes和M
    發表于 10-09 18:04 ?0次下載
    如何部署基于Mesos的<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    淺談Kubernetes集群的高可用方案

    還應包含以下兩個層面的考慮:etcd數據存儲的高可用性和Kubernetes Master組件的高可用性。本文節選自龔正等所著的《kubernetes權威指南》。 1.etcd高可用性方案 etcd
    發表于 10-11 10:04 ?1次下載
    淺談<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>的高可用方案

    Kubernetes集群發生網絡異常時如何排查

    本文將引入一個思路:“ Kubernetes 集群發生網絡異常時如何排查”。文章將引入 Kubernetes
    的頭像 發表于 09-02 09:45 ?8213次閱讀

    Kubernetes集群內服務通信機制介紹

    現在在 Kubernetes 集群,我們擁有構成集群管理組件和一組工作機器(稱為節點)的控制平面。這些節點托管 Pod,這些 Pod 將后
    發表于 10-04 10:13 ?701次閱讀

    Kubernetes集群的關閉與重啟

    日常對 Kubernetes 集群運行維護的過程,您可能需要臨時的關閉或者是重啟 Kubernetes
    的頭像 發表于 11-07 09:50 ?1w次閱讀

    Kubernetes集群部署

    Kubeadm是一種Kubernetes集群部署工具,通過kubeadm init命令創建master節點,通過 kubeadm join命令把node節點加入到集群
    的頭像 發表于 02-15 10:35 ?2093次閱讀

    Kubernetes的邏輯組件

    Kubernetes是生產級別的容器編排系統,其物理集群有Master和Node兩種類型的節點
    的頭像 發表于 02-15 10:46 ?1507次閱讀
    <b class='flag-5'>Kubernetes</b><b class='flag-5'>中</b>的邏輯<b class='flag-5'>組件</b>

    Kubernetes Pod如何獨立工作

    在學習 Kubernetes 網絡模型的過程,了解各種網絡組件的作用以及如何
    的頭像 發表于 05-16 14:29 ?852次閱讀
    <b class='flag-5'>Kubernetes</b> Pod如何獨立工作

    使用Jenkins和單個模板部署多個Kubernetes組件

    持續集成和部署,我們通常需要部署多個實例或組件Kubernetes集群。通過Jenkin
    的頭像 發表于 01-02 11:40 ?1117次閱讀
    使用Jenkins和單個模板部署多個<b class='flag-5'>Kubernetes</b><b class='flag-5'>組件</b>

    使用Velero備份Kubernetes集群

    Velero 是 heptio 團隊(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。
    的頭像 發表于 08-05 15:43 ?660次閱讀
    使用Velero備份<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    k8s網絡的基本介紹

    Kubernetes網絡是指在Kubernetes集群不同組件之間進行通信和
    的頭像 發表于 06-16 13:42 ?267次閱讀
    主站蜘蛛池模板: 亚洲色图激情文学 | 欧洲电影巜肉欲丛林 | 伊人久久久久久久久香港 | 高清国产免费观看视频在线 | 久久精品亚洲视频 | 在线高清无码欧美久章草 | 成人久久欧美日韩一区二区三区 | 亚洲精品国产专区91在线 | 麻豆人妻换人妻X99 麻豆区蜜芽区 | 国产成人精品精品欧美 | 久久一本综合 | 无码AV精品一区二区三区 | 一道本在线伊人蕉无码 | 70岁妇女牲交色牲片 | 把腿张开老子CAO烂你动态图 | 欧美A级肉欲大片XXX | 91极品蜜桃臀在线播放 | 青草国产在线视频免费 | 97人妻久久久精品系列A片 | 国产高清视频在线观看不卡v | 宝贝好紧好爽再搔一点试視頻 | 久久性生大片免费观看性 | 国产囗交10p | 捏奶动态图吃奶动态图q | 狠狠色狠狠色88综合日日91 | 亚洲国产无线码在线观看 | 四川老师边上网课边被啪视频 | 精品AV综合导航 | 视频区 国产 欧美 日韩 | 91羞羞视频 | 日本不卡三卡四卡 | 中国特级黄色大片 | 高h辣h双处全是肉一对一 | 9亚洲欧洲免费无码在线 | 国产午夜高潮熟女精品AV | 使劲别停好大好深好爽动态图 | 亚洲日本一区二区三区在线不卡 | 欧美性视频xxxxhd | 久久这里的只有是精品23 | 老师小扫货水能么多叫出来 | 国产精品第九页 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品