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

这可怎么肿么玩呢?
突然想到,在给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 -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: b-ipv4-pool
spec:
cidr: 172.16.0.0/16
ipipMode: Always
natOutgoing: true
EOF;
备注:根据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.yaml
apiVersion: projectcalico.org/v3
items:
- 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: Never
kind: IPPoolList
metadata:
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 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.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
k8s西游记 - 切换网络插件IP池的更多相关文章
- k8s的flannel网络插件配置
flannel的网络插件配置 Kubernetes网络通信需要解决以下问题: (1)容器间通信:同一个Pod内的多个容器间的通信,lo (2)Pod通信:P ...
- 071、如何定制calico网络的IP池(2019-04-16 周二)
参考https://www.cnblogs.com/CloudMan6/p/7571272.html 在前面的学习中,我们没有特别配置,calico会自动为网络分配subnet,当然我们也可以根据 ...
- 3.kubernetes的CNI网络插件-Flannel
目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...
- K8S Calico网络插件
0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...
- K8S(03)核心插件-Flannel网络插件
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 K8S核心网络插件Flannel 目录 系列文 ...
- k8s入坑之路(9)k8s网络插件详解
Flannel: 最成熟.最简单的选择 Calico: 性能好.灵活性最强,目前的企业级主流 Canal: 将Flannel提供的网络层与Calico的网络策略功能集成在一起. Weave: 独有的功 ...
- k8s更换网络插件:从flannel更换成calico
卸载flannel 查看已安装的flannel的信息 # 查看CNI插件,可以得知使用的是flannel # cat /etc/cni/net.d/10-flannel.conflist { &quo ...
- 第 8 章 容器网络 - 071 - 如何定制 Calico 的 IP 池?
定制IP池 首先定义一个 IP Pool,比如: calicoctl create -f ipPool.yml 用此 IP Pool 创建 calico 网络. docker network crea ...
- K8S Flannel网络插件
0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...
随机推荐
- .NET 欢乐编程术之类型超级转换之术👍👍
准备工作:先确保 VS 版本大于 2017,且支持C# 7.0 语言版本.然后新建 .Net Core 项目,在 Nuget 包管理上引入微软霸霸官方包 System.Runtime.Compiler ...
- Java网络和代理
Java网络和代理 1)简介 在当今的网络环境中,特别是企业网络环境中,应用程序开发人员必须像系统管理员一样频繁地处理代理.在某些情况下,应用程序应该使用系统默认设置,在其他情况下,我们希望能够非常严 ...
- 【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?
一.引子 一般在游戏进行对外测试的时候都会有一个玩家QQ群,方便玩家反馈问题.交流游戏心得等.那么为了增加玩家加QQ群的欲望,可能会在游戏里面设计一个小功能,点击一下可以直接拉起手Q加群的操作,加了Q ...
- 简单的JSP分页显示
1.mysql的limit关键字 (DAO) select * from tablename limit startPoint, numberPerPage; tablename 就是要分页显示的那张 ...
- jsp对数据库的使用
JDBC由Sun公司制定,全称JavaDataBase Connectivity,是一种可以执行SQL语句并可返回结果的javaAPI,支持多种关系型数据库,封装在Java.sql.* 它的具体位置在 ...
- python3 导入包总提示no moudle named xxx
一.python中的包有三种 1.python自带的包,如sys, os 2.python的第三方库,如 requests, selenium 3.自己写的.py文件 二.今天主要说下导入自己写的包 ...
- 1. 源码分析---SOFARPC可扩展的机制SPI
这几天离职在家,正好没事可以疯狂的输出一下,本来想写DUBBO的源码解析的,但是发现写DUBBO源码的太多了,所以找一个写的不那么多的框架,所以就选中SOFARPC这个框架了. SOFARPC是蚂蚁金 ...
- 坐标下降法(coordinate descent method)求解LASSO的推导
坐标下降法(coordinate descent method)求解LASSO推导 LASSO在尖点是singular的,因此传统的梯度下降法.牛顿法等无法使用.常用的求解算法有最小角回归法.coor ...
- Linux基础进程管理
一.进程 了解如进程的: • PID,PPID • 当前的进程状态 • 内存的分配情况 • CPU和已花费的实际时间 • 用户UID,他决定进程的特权 (一).静态查看进程 # ps axu | le ...
- Resource 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...