欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:k8s pod獲取ip地址過程

柚子快報邀請碼778899分享:k8s pod獲取ip地址過程

http://yzkb.51969.com/

在學習 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)當前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分配不同的段。如下查看當前默認的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)用

當在節(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;當有pod被調(diào)度到當前節(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:當請求到達之后,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地址。

柚子快報邀請碼778899分享:k8s pod獲取ip地址過程

http://yzkb.51969.com/

相關(guān)閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19117211.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄