k8s - 如何变更CNI网络插件IP池?

作者:justmine
头条号:大数据与云原生
微信公众号:大数据与云原生
创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。
为了方便阅读,微信公众号已按分类排版,后续的文章将在移动端首发,想学习云原生相关知识,请关注我

前言

最近在另一个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/16ipipMode: AlwaysnatOutgoing: 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/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: truedefault-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

最后

如果有什么疑问和见解,欢迎评论区交流。
如果觉得本篇有帮助的话,欢迎推荐转发
如果觉得本篇非常不错的话,可以请作者吃个鸡腿,创作的源泉将如滔滔江水连绵不断,嘿嘿。

参考链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word List23

word List23 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

今天给大家翻译一篇由ASP.NET首席开发工程师James Newton-King前几天发表的一篇博客&#xff0c;文中带来了一个实验性的产品gRPC-Web。大家可以点击文末的讨论帖进行相关反馈。我会在文章末尾给出原文链接。全部译文如下&#xff1a;我很高兴宣布通过.NET对gRPC-Web进行实验性…

python文件图标变成小电脑_手把手教你给Python程序写图形界面,并且打包成exe文件-exe文件...

环境配置 官网下载Python3&#xff0c;LZ的配置环境是Python3.6&#xff0c;PyCharm 2017.2.1pip3 install PyQt5 #下载PyQt5 pip install PyQt5-tools -i http://pypi.douban.com/simple --trusted-hostpypi.douban.com #下载工具designer.exe&#xff0c;来开发图形界面 在Py…

数据结构(哈夫曼树+KMP)之 数据加密+解密

数据结构&#xff08;哈夫曼树KMP&#xff09;之 数据加密解密 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define INF 2^31-1 int next[N]; int Sum 0;//权重总和 typedef struct fNode {//哈夫…

扩展性思维

扩展性思维&#xff0c;简单来说就是举一反三、触类旁通&#xff1b;它的核心目标是提升我们思维的广度&#xff0c;也就是让我们的知识树变得更加开阔&#xff1b;具备了这样的知识树后才能发现要解决的同类型事情一起解决。下面以几个举一反三的例子讲一下扩展性思维&#xf…

C语言 ---文件读取

C语言 —文件读取 参考学习链接&#xff1a; https://blog.csdn.net/qq_38149046/article/details/80359743 http://c.biancheng.net/view/2068.html 代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {FILE *fp;char ch;//如果文件不存在&am…

个人永久性免费-Excel催化剂功能第119波-一大波虚构数据,支持多国语言版本

日常的数据分析过程中或者制作教程过程中&#xff0c;难免要生成一些示例数据、虚构数据&#xff0c;Excel除了几个基础的随机数值函数外&#xff0c;没有什么额外的支持&#xff0c;本篇再次补全这个缺陷。虚构函数的由来本次的功能&#xff0c;使用老外做的轮子&#xff0c;有…

python可变参数和关键字参数位置_python中函数的默认参数和可变长参数如何排列?...

参数在python中总是通过赋值进行传递的。在默认情况下&#xff0c;参数是通过其位置进行匹配的&#xff0c;从左到右&#xff0c;而且必须精确的传递和函数头部参数名一样多的参数。 这种默认的传递方式很简单 def f(a,b,c): print(a,b,c) f(1,2,3) 1 2 3 python中可以使用基于…

word List 24

word List 24 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

[USACO1.5]八皇后 Checker Challenge

给定一个 NN 的棋盘&#xff0c;请你在上面放置 N 个棋子&#xff0c;要求满足&#xff1a; 每行每列都恰好有一个棋子 每条对角线上都最多只能有一个棋子 上图给出了当 N6 时的一种解决方案&#xff0c;该方案可用序列 2 4 6 1 3 5 来描述&#xff0c;该序列按顺序给出了从…

python窗口显示表格_pyqt 调用tablewidget窗口时无法显示窗口内容

请教一下大家&#xff0c;想实现在主窗口中点击按钮调用一个新窗口&#xff0c;这个窗口是tablewidget&#xff0c;目前可以实现弹出窗口&#xff0c;但是无法显示表格&#xff0c;只有一个空白窗口。实在找不到原因了&#xff0c;还请大家指点。 这是主窗口代码 # -*- coding:…

程序员过关斩将--redis做消息队列,香吗?

菜菜哥&#xff0c;我刚做完了一个订单系统&#xff0c;感觉很简单呀说说看&#xff0c;大量的订单状态怎么处理的&#xff1f;我设计的时候可是考虑了这一点&#xff0c;所以用了异步处理&#xff0c;采用了MQ那用的什么MQ呢&#xff0c;透露一下呗我用的redis做的MQ&#xff…

word List25

word List25 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

c++ 多核cpu序列号_关于 CPU 的一些基本知识总结

优质文章&#xff0c;及时送达作者 | 骏马金龙链接 | cnblogs.com/f-ck-need-u/p/11141636.htm关于CPU和程序的执行CPU是计算机的大脑。1、程序的运行过程&#xff0c;实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程。当程序要执行的部分被装载到内存后&#xff0c;C…

.NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

04 | Startup&#xff1a;掌握ASP.NET Core的启动过程新建一个 ASP.NET Core Web 应用程序选择 APIpublic class Program {public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) >…

C语言---二进制和文本文件的备份

C语言—二进制和文本文件的备份 学习参考&#xff1a; https://www.cnblogs.com/jackytang/p/9011127.html 代码&#xff1a; #include <stdio.h> #include <stdlib.h> int copyFile(char *fileRead, char *fileWrite); int main() {char fileRead[100]; // 要…

聊聊统一身份认证服务

源宝导读&#xff1a;当企业的应用系统逐渐增多后&#xff0c;每个系统单独管理各自的用户数据容易行成信息孤岛&#xff0c;分散的用户管理模式阻碍了企业应用向平台化演进。本文将介绍构建统一身份认证的技术方案和思路。一、背景当企业的应用系统逐渐增多后&#xff0c;每个…

Word List 26

Word List 26 如果存在什么问题&#xff0c;欢迎批评指正!谢谢&#xff01;

[蓝桥杯2015决赛]五星填数-枚举+数论

解题思路&#xff1a; 对于一种符合题意的情况&#xff0c;旋转和对称之后结果也是一样&#xff0c;所以我们要除去旋转(/5)和对称(/2)的情况&#xff0c;所以结果要除以10 代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std;…

word List27

word List27 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;