kubernetes Calico網絡更改IP池


前言介紹
使用Calico IPAM時,會為每個工作負載分配一個來自所選IP地址池的地址。您可能希望修改正在運行的集群的IP池的CIDR,原因如下:
遷移到可以容納更多工作負載的更大CIDR,離開意外使用的CIDR。本頁的目的提供有關如何在正在運行的群集上從一個IP池CIDR更改為另一個IP池的指導。

先決條件
本文檔僅適用於使用Calico IPAM的情況。雖然Calico支持更改IP池,但並非所有orchestrator都支持。請務必查閱您正在使用的文檔,以確保它支持更改工作負載CIDR。
例如,在Kubernetes中,以下所有三個參數必須等於或包含Calico IP池CIDR:
KUBE-API服務器: --pod-network-cidr
KUBE-代理: --cluster-cidr
KUBE-控制器經理: --cluster-cidr

注意:此過程將需要重新創建所有Calico網絡工作負載,這將對您的應用程序的可用性產生一些影響。在不遵循此遷移過程的情況下刪除IP池可能會導致任何正在運行的工作負載中的網絡連接中斷,其中包含來自該IP池的地址。即:

1.如果在IP池上啟用了IP-in-IP或VXLAN,則這些工作負載將不再封裝其流量。
2.如果在IP池上啟用了nat-outgoing,則這些工作負載將不再具有NAT'd流量。

如果使用Calico BGP路由,將不再聚合到pod的路由。更改IP池基本流程如下:
1.添加新的IP池。
2.禁用舊的IP池。這可以防止舊IP池中的新IPAM分配,而不會影響現有工作負載的網絡連接。
3.重新創建從舊IP池分配地址的所有現有工作負載。
4.刪除舊的IP池。

示例:
在此示例中,我們使用kubeadm創建了一個集群。我們希望pod在一定范圍內使用IP, 因此我們在運行時設置kubeadm init的時候使用的地址是10.0.0.0/16  如:(--pod-network-cidr=10.0.0.0/16)。但是,我們在沒有設置默認IP池的情況下安裝了Calico。運行calicoctl get ippool -o wide顯示Calico創建了其默認IP池192.168.0.0/16:
NAME CIDR NAT IPIPMODE VXLANMODE DISABLED
default-ipv4-ippool 192.168.0.0/16 true Always Never false

根據輸出calicoctl get wep --all-namespaces,我們看到kube-dns已經從錯誤的范圍分配了一個地址:
NAMESPACE WORKLOAD NODE NETWORKS INTERFACE
kube-system kube-dns-6f4fd4bdf-8q7zp vagrant 192.168.52.130/32 cali800a63073ed

開始更改
1.添加新的IP池:

 1 calicoctl create -f -<<EOF
 2 apiVersion: projectcalico.org/v3
 3 kind: IPPool
 4 metadata:
 5 name: new-pool
 6 spec:
 7 cidr: 10.0.0.0/16
 8 ipipMode: Always
 9 natOutgoing: true
10 EOF

我們現在應該有兩個啟用的IP池,我們可以在運行時看到,查看命令:calicoctl get ippool -o wide

1 NAME CIDR NAT IPIPMODE DISABLED
2 default-ipv4-ippool 192.168.0.0/16 true Always false
3 new-pool 10.0.0.0/16 true Always false

2.禁用舊的IP池,首先將IP池定義保存到磁盤:

1 calicoctl get ippool -o yaml > pool.yaml

pool.yaml 文件內容:

 1 apiVersion: projectcalico.org/v3
 2 items:
 3 - apiVersion: projectcalico.org/v3
 4 kind: IPPool
 5 metadata:
 6 name: default-ipv4-ippool
 7 spec:
 8 cidr: 192.0.0.0/16
 9 ipipMode: Always
10 natOutgoing: true
11 - apiVersion: projectcalico.org/v3
12 kind: IPPool
13 metadata:
14 name: new-pool
15 spec:
16 cidr: 10.0.0.0/16
17 ipipMode: Always
18 natOutgoing: true

注意:已經編輯了一些額外的特定於群集的信息以提高可讀性,編輯文件,添加disabled: true到default-ipv4-ippoolIP池:

1 apiVersion: projectcalico.org/v3
2 kind: IPPool
3 metadata:
4 name: default-ipv4-ippool
5 spec:
6 cidr: 192.0.0.0/16
7 ipipMode: Always
8 natOutgoing: true
9 disabled: true

應用更改:

1 calicoctl apply -f pool.yaml

我們可以看到產生了一下變化,查看命令:

1 calicoctl get ippool -o wide
2 NAME CIDR NAT IPIPMODE DISABLED
3 default-ipv4-ippool 192.168.0.0/16 true Always true
4 new-pool 10.0.0.0/16 true Always false

使用禁用池中的IP重新創建所有現有工作負載。在此示例中,kube-dns是Calico聯網的唯一工作負載:

1 kubectl delete pod -n kube-system kube-dns-6f4fd4bdf-8q7zp

通過運行以下命令檢查新工作負載現在是否在新IP池中具有地址:

1 calicoctl get wep --all-namespaces
2 NAMESPACE WORKLOAD NODE NETWORKS INTERFACE
3 kube-system kube-dns-6f4fd4bdf-8q7zp vagrant 10.0.24.8/32 cali800a63073ed

刪除舊的IP池:

1 calicoctl delete pool default-ipv4-ippool


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM