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 ...
随机推荐
- [leetcode] 51. N-Queens (递归)
递归,经典的八皇后问题. 利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数. 对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行. 遍历过程中,若 ...
- python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05
迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...
- Linux AUFS 文件系统
AUFS 的英文全称为 Advanced Mult-Layered Unification Filesystem,曾经是 Another Mult-Layered Unification Filesy ...
- Linux下gcc编译器的使用
例:gcc -x -g c helloC -o firstC -x:改变gcc的行为.(注:如果是.c文件则不用加-x) -x c :编译c程序 -x c++ :编译c++程序 -x java :编译 ...
- 带新手玩转MVC——不讲道理就是干(上)
带新手玩转MVC——不讲道理就是干(上) 前言:这几天更新了几篇博客,都是关于Servlet.JSP的理解,后来又写了两种Web开发模式,发现阅读量还可以,说明JSP还是受关注的,之前有朋友评论说JS ...
- 考试安排查询脚本(CUP)
去年热情高涨的时候心血来潮做了个简易的查询脚本,限于当时技术水平(菜),实现得不是很好,这几天终于想起来填坑了.环境依赖: brew install python3 pip3 install requ ...
- nginx 301跳转https后post请求失效问题解决
app本地请求是http端口,后来升级https强制301跳转,设置如下 server { listen 80; server name www.XXX.com; rewrite ^/(.*)$ ht ...
- Java 之MVC动态分页完美实现
一个分页小技术有时也是让人挠头,在这里完全前端实现方式与Java的实现方式,我们提供给你完全的编码参考,希望能够帮到你哦(:) 内容导读 1.程序结构 2.JSP页面设计 3.分页主要编码 4.运行效 ...
- 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误
非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...
- 后端小白的VUE入门笔记, 前端高能慎入
因为项目需要前后端分离,后端竟然不用控制view层了,页面的跳转后端不再干涉,(前端的vue经过打包后成了一张index.html) 后端只需要响应给前端json串就ok,其实这不是爽歪歪?但是觉得还 ...