最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

k8s?pod獲取ip地址實現(xiàn)方式

 更新時間:2026年02月25日 10:37:55   作者:魏志標  
本文介紹了Kubernetes網(wǎng)絡(luò)模型中各種網(wǎng)絡(luò)組件的作用和交互方式,包括CRI、CNI接口,IPAM(IPAddressManagement),以及kubelet、cri、cni調(diào)用過程,Kubernetes通過這些組件確保每個Pod都有唯一的IP地址,并能夠進行有效的通信

在學(xué)習(xí) Kubernetes 網(wǎng)絡(luò)模型的過程中,了解各種網(wǎng)絡(luò)組件的作用以及如何交互非常重要。本文就介紹了各種網(wǎng)絡(luò)組件在 Kubernetes 集群中是如何交互的,以及如何幫助每個 Pod 都能獲取 IP 地址。

Kubernetes 網(wǎng)絡(luò)模型的核心要求之一是每個 Pod 都擁有自己的 IP 地址并可以使用該 IP 地址進行通信。本文將介紹各種網(wǎng)絡(luò)組件在 Kubernetes 集群中是如何交互的,以及如何幫助每個 Pod 都獲取 IP 地址。

在 Kubernetes 中有多種網(wǎng)絡(luò)設(shè)置方法,以及 container runtime 的各種選項。本文將使用 calico 作為 network provider以及使用 containered 作為 container runtime。

在做介紹之前,先來了解下本文所接觸到的接口

一、CRI/CNI接口

CRI(容器運行時接口)是一個插件接口,允許 kubelet 使用不同的 container runtimes。各種 container runtimes 都實現(xiàn)了 CRI API,這使用戶可以在 Kubernetes 安裝中使用他們想要的 container runtimes。常用分runtime主要有docker、containerd、kata、cri-o等

CNI(容器網(wǎng)絡(luò)接口)項目包含一個為 Linux 容器提供基于通用插件網(wǎng)絡(luò)解決方案的規(guī)則。它由各種插件組成,這些插件在配置 Pod 網(wǎng)絡(luò)時執(zhí)行不同的功能。CNI 插件是遵循 CNI 規(guī)范的可執(zhí)行文件。常用的cni插件有flannel、calico以及kube-ovn。

在一個k8s環(huán)境中,安裝完cni之后,可以在/opt/cni/bin/目錄下看到實現(xiàn)當(dāng)前cni的不同插件,如下:
[root@node1 ~]# ll /opt/cni/bin/
total 285392
-rwxr-xr-x 1 root root  3780654 Apr  9  2023 bandwidth
-rwxr-xr-x 1 root root  4536104 Feb  5  2021 bridge
-rwsr-xr-x 1 root root 58219864 Apr  9  2023 calico
-rwsr-xr-x 1 root root 58219864 Apr  9  2023 calico-ipam
-rwxr-xr-x 1 root root 10270090 Feb  5  2021 dhcp
-rwxr-xr-x 1 root root  4767801 Feb  5  2021 firewall
-rwxr-xr-x 1 root root  2474798 Apr  9  2023 flannel
-rwxr-xr-x 1 root root  4144106 Feb  5  2021 host-device
-rwxr-xr-x 1 root root  3241605 Apr  9  2023 host-local
-rwsr-xr-x 1 root root 58219864 Apr  9  2023 install
-rwxr-xr-x 1 root root  4288339 Feb  5  2021 ipvlan
-rwxr-xr-x 1 root root  3295519 Apr  9  2023 loopback
-rwxr-xr-x 1 root root  4367216 Feb  5  2021 macvlan
-rwxr-xr-x 1 root root 45946850 Oct 24 16:02 multus-shim
-rwxr-xr-x 1 root root  3679140 Apr  9  2023 portmap
-rwxr-xr-x 1 root root  4467317 Feb  5  2021 ptp
-rwxr-xr-x 1 root root  3701138 Feb  5  2021 sbr
-rwxr-xr-x 1 root root  3153330 Feb  5  2021 static
-rwxr-xr-x 1 root root  3379564 Apr  9  2023 tuning
-rwxr-xr-x 1 root root  4287972 Feb  5  2021 vlan
-rwxr-xr-x 1 root root  3759977 Feb  5  2021 vrf

后面我們會講到上面一些插件的使用

二、IPAM

IPAM(IP Address Management)是一種用于管理IP地址和DHCP(Dynamic Host Configuration Protocol)的工具或系統(tǒng)。IPAM旨在簡化和集中管理IP地址分配、子網(wǎng)劃分和DHCP配置等任務(wù)。

IPAM是一種管理IP地址和DHCP的解決方案,它提供了對IP地址資源的集中管理、監(jiān)控和控制。通常提供以下功能

  • IP地址分配和管理:IPAM允許管理員有效地分配和管理IP地址,包括靜態(tài)和動態(tài)地址分配。管理員可以輕松跟蹤每個IP地址的使用情況,避免地址沖突和資源浪費。
  • 子網(wǎng)劃分和管理:IPAM允許管理員創(chuàng)建和管理子網(wǎng),包括對子網(wǎng)進行自動劃分和重新劃分的能力。管理員可以根據(jù)需要分配IP地址范圍,確保網(wǎng)絡(luò)的合理組織和資源利用。
  • DHCP配置和管理:IPAM可以與DHCP服務(wù)器集成,提供對DHCP配置的集中管理和控制。管理員可以輕松配置DHCP參數(shù),如IP地址池、租約時間等,并監(jiān)控DHCP服務(wù)器的狀態(tài)和性能。
  • IP地址審計和跟蹤:IPAM記錄和跟蹤每個IP地址的使用情況,包括分配給特定設(shè)備或用戶的詳細信息。這有助于審計IP地址的使用和追蹤網(wǎng)絡(luò)活動。
  • 自動化和集成:IPAM可以自動執(zhí)行一些常見的管理任務(wù),如IP地址分配、子網(wǎng)劃分和DHCP配置。此外,IPAM還可以與其他網(wǎng)絡(luò)管理工具和系統(tǒng)進行集成,實現(xiàn)更高效的操作和協(xié)作。

IPAM有三種模式,host-local、dhcp、static

  • host-local
host-local插件從address ranges 中分配IP,將分配的結(jié)果存在本地機器,所以這也是為什么叫做host-local。舉例如下:
{
    "ipam": {
        "type": "host-local",
        "ranges": [
            [
                {
                    "subnet": "10.10.0.0/16",
                    "rangeStart": "10.10.1.20",
                    "rangeEnd": "10.10.3.50",    ###使用的ip范圍
                    "gateway": "10.10.0.254"
                },
                {
                    "subnet": "172.16.5.0/24"
                }
            ],
            [
                {
                    "subnet": "3ffe:ffff:0:01ff::/64",
                    "rangeStart": "3ffe:ffff:0:01ff::0010",
                    "rangeEnd": "3ffe:ffff:0:01ff::0020"
                }
            ]
        ],
        "routes": [   ##路由信息
            { "dst": "0.0.0.0/0" },
            { "dst": "192.168.0.0/16", "gw": "10.10.5.1" },
            { "dst": "3ffe:ffff:0:01ff::1/64" }
        ]
    }
}

################################
################################
但是在calico網(wǎng)絡(luò)中,使用的不是host-local,而是calico自己開發(fā)的插件,calico-ipam.
在k8s集群安裝好cni之后,可以在/etc/cni/net.d目錄下看到默認配置文件10-calico.conflist,如下:
[root@node1 networks]# cat /etc/cni/net.d/10-calico.conflist 
{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "calico",
      "log_level": "info",
      "log_file_path": "/var/log/calico/cni/cni.log",
      "datastore_type": "kubernetes",
      "nodename": "node1",
      "mtu": 0,
      "ipam": {
          "type": "calico-ipam"   ####功能類似host-local
      },
      "policy": {
          "type": "k8s"
      },
      "kubernetes": {
          "kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
      }
    },
    {
      "type": "portmap",
      "snat": true,
      "capabilities": {"portMappings": true}
    },
    {
      "type": "bandwidth",
      "capabilities": {"bandwidth": true}
    }
  ]
}[root@node1 networks]# 

##############################
##############################
如何能保證在環(huán)境中pod的ip地址不會重復(fù)
calico網(wǎng)絡(luò)中,會把大的網(wǎng)絡(luò)分成小的block,會為每個注冊的節(jié)點都分配一段,node去標示一個名為PodCIDR的值,代表該Node可以使用的網(wǎng)段是什么,且分配的時候保證為每個pod分配不同的段。如下查看當(dāng)前默認的ippool
[root@node1 ~]# calicoctl  get ippool -o wide 
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR   
default-ipv4-ippool   10.233.64.0/18   true   Always     Never       false      false              all()  

#####查看為每個節(jié)點分配的小的block,如下:
[root@node1 ~]# calicoctl ipam check
Checking IPAM for inconsistencies...

Loading all IPAM blocks...
Found 3 IPAM blocks.
 IPAM block 10.233.90.0/24 affinity=host:node1:   ####可以看到為節(jié)點分配的CIDR
 IPAM block 10.233.92.0/24 affinity=host:node3:
 IPAM block 10.233.96.0/24 affinity=host:node2:
IPAM blocks record 28 allocations.

Loading all IPAM pools...
  10.233.64.0/18
Found 1 active IP pools.

Loading all nodes.
Found 3 node tunnel IPs.

Loading all workload endpoints.
Found 25 workload IPs.
Workloads and nodes are using 28 IPs.

Looking for top (up to 20) nodes by allocations...
  node3 has 12 allocations
  node2 has 11 allocations
  node1 has 5 allocations
Node with most allocations has 12; median is 11

Scanning for IPs that are allocated but not actually in use...
Found 0 IPs that are allocated in IPAM but not actually in use.
Scanning for IPs that are in use by a workload or node but not allocated in IPAM...
Found 0 in-use IPs that are not in active IP pools.
Found 0 in-use IPs that are in active IP pools but have no corresponding IPAM allocation.

Check complete; found 0 problems.
[root@node1 ~]# 
####################################
查看節(jié)點的地址
[root@node1 ~]# kubectl describe node  | grep -i cidr
PodCIDR:                      10.233.64.0/24
PodCIDRs:                     10.233.64.0/24
PodCIDR:                      10.233.65.0/24
PodCIDRs:                     10.233.65.0/24
PodCIDR:                      10.233.66.0/24
PodCIDRs:                     10.233.66.0/24

  • dhcp
社區(qū)的cni組件中就包含了dhcp這個ipam,但并沒有提供一個可以參考的案例,大致邏輯是:

1:向dhcp申請ip時,dhcp會使用rpc訪問本地的socket(/run/cni/dhcp.sock)申請一個ip的租約。然后將IP告知調(diào)用者。
2:向dhcp刪除IP時,dhcp同樣通過rpc請求,解除該IP的租約。
  • static
static功能主要是為pod固定ip地址,在社區(qū)其他的版本中,還可以通過whereabouts實現(xiàn)此功能。

三、kubelet、cri、cni調(diào)用

當(dāng)在節(jié)點上調(diào)度 Pod 時,一啟動 Pod 就會發(fā)生很多事情。這里我們僅關(guān)注與 Pod 配置網(wǎng)絡(luò)有關(guān)的動態(tài)。一旦在節(jié)點上調(diào)度了 Pod,將配置網(wǎng)絡(luò)并啟動應(yīng)用程序容器。

流程圖如下:

具體流程分析如下:

  • kubelet調(diào)用cri
1;當(dāng)有pod被調(diào)度到當(dāng)前節(jié)點時,kubelet 會根據(jù)系統(tǒng)使用的runtime來創(chuàng)建pod sandbox 以及網(wǎng)絡(luò)命令空間
2:完成上述步驟后,下一步調(diào)用cni插件
默認在runtime的配置路徑中,有定義cni的使用路徑,如下:
[root@node2 ~]# cat /etc/containerd/config.toml 
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.cn-beijing.aliyuncs.com/kubesphereio/pause:3.8"
    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"     ###默認指定cni插件的路徑
      conf_dir = "/etc/cni/net.d"  ###系統(tǒng)中cni配置文件路徑
      max_conf_num = 1
      conf_template = ""

  • cri調(diào)用cni
1:當(dāng)請求到達之后,cni根據(jù)系統(tǒng)的配置決定使用哪種類型的plugin,默認配置路徑在/etc/cni/net.d/路徑下
[root@node1 ~]# cat  /etc/cni/net.d/10-calico.conflist 
{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "calico",   ####可知使用的cni plugin為calico
      "log_level": "info",
      "log_file_path": "/var/log/calico/cni/cni.log",
      "datastore_type": "kubernetes",
      "nodename": "node1",
      "mtu": 0,
      "ipam": {
          "type": "calico-ipam"  ###ipam 為calico-ipam
      },
      "policy": {
          "type": "k8s"
      },
      "kubernetes": {
          "kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
      }
    },
    {
      "type": "portmap",
      "snat": true,
      "capabilities": {"portMappings": true}
    },
    {
      "type": "bandwidth",
      "capabilities": {"bandwidth": true}
    }
  ]

  • cni調(diào)用各種plugin完成pod網(wǎng)絡(luò)的初始化
1: 調(diào)用bridge plugin 創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備。首先判斷節(jié)點上是否存在網(wǎng)橋,如果沒有則創(chuàng)建新的網(wǎng)橋(calico中為tunl0,flannel中為cni0)。
2:緊接著創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備veth pair,將設(shè)備的一端加入到網(wǎng)絡(luò)命名空間,另一端插入到網(wǎng)橋。
3:調(diào)用ipam(host-local)分配ip地址,根據(jù)calico為每個節(jié)點分配的cidr,分配可用的IP地址
  • cni返回ip給container runtime
1:runtime創(chuàng)建pause 容器,并將返回的ip地址加入到命令空間中。

總結(jié)

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kubernetes從私有鏡像倉庫拉取容器鏡像時的身份驗證方式

    Kubernetes從私有鏡像倉庫拉取容器鏡像時的身份驗證方式

    Kubernetes從私有鏡像倉庫拉取容器鏡像時,需要使用私有倉庫的憑證進行身份驗證,這些憑證可以存儲在`private-registry-auth`這個Secret中,然后在Pod或ServiceAccount中指定使用該Secret,這樣可以確保Pod在拉取鏡像時能夠正確進行身份驗證
    2026-01-01
  • kubernetes認證鑒權(quán)內(nèi)容淺析

    kubernetes認證鑒權(quán)內(nèi)容淺析

    這篇文章主要為大家介紹了kubernetes認證鑒權(quán)內(nèi)容淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • K8S節(jié)點本地存儲被撐爆問題徹底解決方法

    K8S節(jié)點本地存儲被撐爆問題徹底解決方法

    這篇文章主要為大家介紹了K8S節(jié)點本地存儲被撐爆問題徹底解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • K8S Pod定向部署到指定節(jié)點的實現(xiàn)全過程

    K8S Pod定向部署到指定節(jié)點的實現(xiàn)全過程

    K8S Pod定向部署通過節(jié)點標簽、親和性和污點三種機制實現(xiàn)資源適配、業(yè)務(wù)隔離與節(jié)點專屬化,適用于不同場景,選型建議為標簽用于基礎(chǔ)、親和性用于彈性、污點用于資源保護
    2025-08-08
  • Kubernetes節(jié)點自動伸縮(Cluster Autoscaler)原理及分析

    Kubernetes節(jié)點自動伸縮(Cluster Autoscaler)原理及分析

    ClusterAutoscaler是Kubernetes官方提供的自動伸縮組件,通過監(jiān)控未調(diào)度的Pod并自動調(diào)整節(jié)點數(shù)量,實現(xiàn)集群資源的動態(tài)調(diào)配,它支持Pod、節(jié)點和資源粒度的自動伸縮,通過配置合理的參數(shù)和策略,可以有效地提升集群的彈性,減少人工干預(yù),降低運維成本
    2026-01-01
  • 刪除k8s環(huán)境過期鏡像&docker磁盤清理方式

    刪除k8s環(huán)境過期鏡像&docker磁盤清理方式

    文章介紹了如何清理Kubernetes環(huán)境中的過期鏡像和Docker磁盤空間,包括使用`docker system prune`命令和編寫腳本進行鏡像刪除
    2025-12-12
  • K8S刪除pod的4種方法小結(jié)

    K8S刪除pod的4種方法小結(jié)

    在Kubernetes集群環(huán)境中工作時,有時會遇到需要從一個工作節(jié)點中刪除pod的情況,下面這篇文章主要給大家介紹了關(guān)于K8S刪除pod的4種方法,需要的朋友可以參考下
    2024-01-01
  • Kubernetes集群模擬刪除k8s重裝詳解

    Kubernetes集群模擬刪除k8s重裝詳解

    這篇文章主要為大家介紹了Kubernetes集群模擬刪除k8s重裝詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • k8s如何給node添加標簽(最新推薦)

    k8s如何給node添加標簽(最新推薦)

    k8s集群如果由大量節(jié)點組成,可將節(jié)點打上對應(yīng)的標簽,然后通過標簽進行篩選及查看,更好的進行資源對象的相關(guān)選擇與匹配,這篇文章主要介紹了k8s如何給node添加標簽,需要的朋友可以參考下
    2023-02-02
  • k8s Prometheus的manifests清單部署實踐

    k8s Prometheus的manifests清單部署實踐

    本教程詳細介紹了如何在Kubernetes集群中部署Prometheus和Grafana監(jiān)控系統(tǒng),并融合了文件傳輸、解壓、編譯及Kubctl命令使用等強調(diào)時區(qū)設(shè)置等步驟,適合初學(xué)者學(xué)習(xí)參考
    2026-05-05

最新評論

武宁县| 博客| 腾冲县| 萨嘎县| 报价| 绵阳市| 上虞市| 东莞市| 澳门| 沂水县| 盐池县| 桃园县| 庆元县| 枣庄市| 泸溪县| 建阳市| 汝城县| 海盐县| 和林格尔县| 安龙县| 灵山县| 广宗县| 甘孜| 南部县| 敖汉旗| 乐至县| 会昌县| 宽甸| 徐闻县| 屯留县| 桂阳县| 陇西县| 虞城县| 西畴县| 嘉定区| 蒙自县| 平罗县| 郎溪县| 普安县| 凤冈县| 镇宁|