k8s跨主机访问不通_k8s西游记 - 变更网络插件IP池

作者:justmine(分布式数据处理研习社)

出处:https://www.cnblogs.com/justmine

创作不易,欢迎转载,但必须在文章开头保留此段声明,否则保留追究法律责任的权利。

前言

最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.10.145配置给了kong,发现kong居然不能访问这个IP,于是进入容器组,执行命令:ping 192.168.10.145,不通,what are you 弄啥呢?

a23f26fd2e873e2851998c855293e14c.png

这可怎么肿么玩呢?

突然想到,在给Kubernetes配置网络插件Calico时,初始化集群时,使用了官方推荐C类IP池,即:192.168.0.0/16,而内网IP刚好符合C类IP池,可能就导致此类IP始终不会被转发到主机网络,带着这样子的猜想,于是决定修改网络插件的IP池。

如何修改Calico网络插件IP池?

1. 安装calicoctl

calicoctl允许您从命令行创建、读取、更新和删除Calico对象。有三种方式可以安装此工具,参考链接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/install。

以二进制文件安装到k8s master主机上

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;

备注:其他安装方式,请大家下去自行研究。

2. 配置calicoctl

配置calicoctl连接到kubernetes API,这里使用最简单的命令行形式,如下:

root@001:~# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl [命令]

备注:其他连接配置,请参考链接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/configure/kdd,大家下去自行研究吧。

设置命令别名

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 -<

备注:根据ipv4的指派范围,一般分为A类、B类、C类,局域网一般使用C类IP池,为了避免和k8s冲突,决定选择B类IP池,即:172.16.0.0/16,关于IP池详细划分,请大家下去自行查阅资料。

再次查看支持的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.yamlapiVersion: projectcalico.org/v3items:- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: default-ipv4-ippool spec: blockSize: 26 cidr: 192.168.0.0/16 ipipMode: Always natOutgoing: true disabled: true # 添加的脚本 nodeSelector: all()- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: network-b-pool spec: blockSize: 26 cidr: 172.16.0.0/16 ipipMode: Always natOutgoing: true nodeSelector: all() vxlanMode: Neverkind: IPPoolListmetadata: resourceVersion: "44524549"

添加disabled: true到default-ipv4-ippool,上面注释位置。

应用变更:

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;

备注:请大家下去自己完善遍历删除吧。

这一步会使用新的IP池重新分配容器组IP,如下:

root@001:~# kubectl -n kong get pods -o wideNAME READY STATUS RESTARTS AGE IPkong-kong-574957fdf7-x8ppk 1/1 Running 0 2d1h 172.16.252.126kong-postgresql-0 1/1 Running 0 4d23h 172.16.252.100kong-kong-controller-74fd6 2/2 Running 2 2d2h 172.16.252.124konga-8cc9565d5-bbm9p 1/1 Running 0 4d22h 172.16.252.103

5. 删除旧IP池

如果所有的Pod IP都已正常分配,但是发现满足旧IP池的IP地址还是无法ping通,也就是无法逃逸出k8s网络,那么请执行下面的命令吧:

root@001:~# k8s-calicoctl delete pool default-ipv4-ippool

最后

如果有什么疑问和见解,欢迎评论区交流。

如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。

如果你对k8s感兴趣的话可以【关注我】,我会定期的在博客分享我的心得。

参考链接

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值