k8s - 如何变更CNI网络插件IP池?
作者:justmine
頭條號(hào):大數(shù)據(jù)與云原生
微信公眾號(hào):大數(shù)據(jù)與云原生
創(chuàng)作不易,在滿足創(chuàng)作共用版權(quán)協(xié)議的基礎(chǔ)上可以轉(zhuǎn)載,但請(qǐng)以超鏈接形式注明出處。
為了方便閱讀,微信公眾號(hào)已按分類排版,后續(xù)的文章將在移動(dòng)端首發(fā),想學(xué)習(xí)云原生相關(guān)知識(shí),請(qǐng)關(guān)注我。
前言
最近在另一個(gè)k8s集群中,搭建了kong網(wǎng)關(guān),在配置OIDC插件時(shí),希望使用Memcahe代替Cookie來存儲(chǔ)會(huì)話信息,于是把部署在同一局域網(wǎng)Memcahe的內(nèi)網(wǎng)IP,比如:192.168.10.145配置給了kong,發(fā)現(xiàn)kong居然不能訪問這個(gè)IP,于是進(jìn)入容器組,執(zhí)行命令:ping 192.168.10.145,不通,what are you 弄啥呢?
這可怎么腫么玩呢?
突然想到,在給Kubernetes配置網(wǎng)絡(luò)插件Calico,初始化集群時(shí),使用了官方推薦C類IP池,即:192.168.0.0/16,而內(nèi)網(wǎng)IP剛好符合C類IP池,可能就導(dǎo)致此類IP始終不會(huì)被轉(zhuǎn)發(fā)到主機(jī)網(wǎng)絡(luò),帶著這樣子的猜想,于是決定修改網(wǎng)絡(luò)插件的IP池。
如何修改Calico網(wǎng)絡(luò)插件IP池?
1. 安裝calicoctl
calicoctl允許您從命令行創(chuàng)建、讀取、更新和刪除Calico對(duì)象。有三種方式可以安裝此工具,參考鏈接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/install。
以二進(jìn)制文件安裝到k8s master主機(jī)上
root@001:~# cd /usr/local/bin; root@001:~# curl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.8.2/calicoctl; root@001:~# chmod +x calicoctl;備注:其他安裝方式,請(qǐng)大家下去自行研究。
2. 配置calicoctl
配置calicoctl連接到kubernetes API,這里使用最簡(jiǎn)單的命令行形式,如下:
root@001:~# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl [命令]備注:其他連接配置,請(qǐng)參考鏈接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/configure/kdd,大家下去自行研究吧。
設(shè)置命令別名
root@001:~# alias k8s-calicoctl='DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl'3. 變更IP池
3.1 查看目前支持的IP池
root@001:~# k8s-calicoctl get ippool -o wide; NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR default-ipv4-pool 192.168.0.0/16 true Always Never false all()備注:看到CIDR字段值,明白了吧,這里就不贅述了。
3.2 添加新的IP池
root@001:~# k8s-calicoctl create -f -<<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata:name: b-ipv4-pool spec:cidr: 172.16.0.0/16ipipMode: AlwaysnatOutgoing: true EOF;備注:根據(jù)ipv4的指派范圍,一般分為A類、B類、C類,局域網(wǎng)一般使用C類IP池,為了避免和k8s沖突,決定選擇B類IP池,即:172.16.0.0/16,關(guān)于IP池詳細(xì)劃分,請(qǐng)大家下去自行查閱資料。
再次查看支持的IP池
root@001:~# k8s-calicoctl get ippool -o wide; NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR default-ipv4-pool 192.168.0.0/16 true Always Never false all() b-ipv4-pool 172.16.0.0/16 true Always Never false all()備注:看到CIDR字段值,明白了吧,這里就不贅述了。
3.3 禁用舊的IP池
備份IP池到文件
root@001:~# k8s-calicoctl get ippool -o yaml > /root/k8s-calico-pools.yaml編輯k8s-calico-pools.yaml
root@001:~# vi /root/k8s-calico-pools.yaml apiVersion: projectcalico.org/v3 items: - apiVersion: projectcalico.org/v3kind: IPPoolmetadata:name: default-ipv4-ippoolspec:blockSize: 26cidr: 192.168.0.0/16ipipMode: AlwaysnatOutgoing: truedisabled: true # 添加的腳本nodeSelector: all() - apiVersion: projectcalico.org/v3kind: IPPoolmetadata:name: network-b-poolspec:blockSize: 26cidr: 172.16.0.0/16ipipMode: AlwaysnatOutgoing: truenodeSelector: all()vxlanMode: Never kind: IPPoolList metadata:resourceVersion: "44524549"添加disabled: true到default-ipv4-ippool,上面注釋位置。
應(yīng)用變更:
root@001:~# k8s-calicoctl apply -f pool.yaml再次查看IP池:
root@001:~# k8s-calicoctl get ippool -o wide; NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR default-ipv4-pool 192.168.0.0/16 true Always Never true all() b-ipv4-pool 172.16.0.0/16 true Always Never false all()4. 重啟所有容器組
kubectl -n [命名空間] delete pods --all;備注:請(qǐng)大家下去自己完善遍歷刪除吧。
這一步會(huì)使用新的IP池重新分配容器組IP,如下:
root@001:~# kubectl -n kong get pods -o wide NAME READY STATUS RESTARTS AGE IP kong-kong-574957fdf7-x8ppk 1/1 Running 0 2d1h 172.16.252.126 kong-postgresql-0 1/1 Running 0 4d23h 172.16.252.100 kong-kong-controller-74fd6 2/2 Running 2 2d2h 172.16.252.124 konga-8cc9565d5-bbm9p 1/1 Running 0 4d22h 172.16.252.1035. 刪除舊IP池
如果所有的Pod IP都已正常分配,但是發(fā)現(xiàn)滿足舊IP池的IP地址還是無法ping通,也就是無法逃逸出k8s網(wǎng)絡(luò),那么請(qǐng)執(zhí)行下面的命令吧:
root@001:~# k8s-calicoctl delete pool default-ipv4-ippool最后
如果有什么疑問和見解,歡迎評(píng)論區(qū)交流。
如果覺得本篇有幫助的話,歡迎推薦和轉(zhuǎn)發(fā)。
如果覺得本篇非常不錯(cuò)的話,可以請(qǐng)作者吃個(gè)雞腿,創(chuàng)作的源泉將如滔滔江水連綿不斷,嘿嘿。
參考鏈接
https://docs.projectcalico.org/v3.8/getting-started/calicoctl/install
https://docs.projectcalico.org/v3.8/getting-started/calicoctl/configure/kdd
https://docs.projectcalico.org/v3.8/networking/changing-ip-pools
總結(jié)
以上是生活随笔為你收集整理的k8s - 如何变更CNI网络插件IP池?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个支持 CodeFirst/DbFir
- 下一篇: 扩展性思维