Kubernets Apiserver IP 段变更后的故障处理

集群Service IP 段变更后(从 10.96.0.0/16 变为 10.17.0.0/16),导致 kubernetes.default.svc 的ClusterIP IP (10.96.0.1)和段范围不一样,对于这个情况,需要重建该 svc。

重建方法很简单,删除该 Service,集群会自动创建一个新的,ClusterIP 为 10.17.0.1 的 service。但是如果你和我一样直接这样操作,那大概率会遇到和我一样的坑。

这个是 集群内的服务访问apiserver 的主要方式。这个时候,几乎集群内需要和 apiserver 交互的功能和服务都不能正常使用。因为它们还是要和以前的 Service IP 进行通讯。

比如 calico-node 就开始出现问题、如创建销毁 pod的过程 要和calico-node通讯。一连串地炸了。

重建 apiserver 和 calico-node 后,发现 calico-node 起不来,发现它还是连接到老的 ClusterIP,于是修改它的环境变量指定正确的 Apiserver IP。

可以通过加入环境变量到 calico-node demonset 中,指定 IP 和端口

KUBERNETES_SERVICE_HOST:是k8s的kubernetes服务的serviceIP
KUBERNETES_SERVICE_PORT: 是k8s的kubernetes服务的端口号
KUBERNETES_SERVICE_PORT_HTTPS:是k8s的kubernetes服务的https端口号

于是编辑

kubectl edit daemonset calico-node -n kube-system
# 发现存在以下映射自 configmap 的环境变量kubernetes-services-endpoint,但是 configmap 并不存在
- configMapRef:name: kubernetes-services-endpoint
# 我就没直接加到demonset里面,创建了对应的configmap
# 创建 ep.yaml 内容如下
apiVersion: v1
data:KUBERNETES_SERVICE_HOST: 10.1.15.121KUBERNETES_SERVICE_PORT: "6443"KUBERNETES_SERVICE_PORT_HTTPS: "6443"
kind: ConfigMap
metadata:name: kubernetes-services-endpointnamespace: kube-systemkubectl apply -f ep.yaml

提交后calico-node 能顺利起来了,但是其它服务还是有问题。

上面 10.1.15.121 是我的 apiserver master 的 IP,为什么不写集群内的 Service ClusterIP 呢?当时改过为正确的新 IP,但是还是无法启动,因为证书里没含有新的集群 IP,然后就写这个了。证书当时每个 master 的 api 和负载均衡的域名都加进去了。

它正常后,pod 创建是没问题了,但是一些核心的服务还是有问题的。因为通过 Service 拿到的新 IP 10.17.0.1 不在 apiserver 的证书里面。

查看证书 SANs 命令

for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done

于是到这一步就需要重新生成集群证书并把新 IP 加进去了。

以下是基于集群是 kubeadm 安装的前提

  1. 编辑 cm 加入

    kubectl edit cm -n kube-system kubeadm-configClusterConfiguration: |apiServer:certSANs:- 127.0.0.1- apiserver.cluster.local- 10.103.97.2- 10.1.15.121- 10.1.15.122- 10.1.15.123- 10.17.0.1
    
  2. 备份和删除本地证书

    cp -r /etc/kubernetes /etc/kubernetes-bak
    rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*}
    rm -rf /etc/kubernetes/pki/etcd/{healthcheck*,peer*,server*} 
    
  3. 生成新的证书

    kubeadm init phase certs all --config kubeadmin-config.yaml
    
  4. 在每个 master node 重复 2~3 步骤

  5. 完成后,重建 apiserver 后 集群就正常了

总结

换 IP 段后,要及时生成新的 apiserver 的 Service ClusterIP 到证书 SANs 里。然后再重建 kubernetes.default.svc 。最后我把 kubernetes-services-endpoint configmap 的 IP 改为正确的 Service cluster IP 并重建了 calico-node。

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

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

相关文章

Python28-7.4 独立成分分析ICA分离混合音频

独立成分分析(Independent Component Analysis,ICA)是一种统计与计算技术,主要用于信号分离,即从多种混合信号中提取出独立的信号源。ICA在处理盲源分离(Blind Source Separation,BSS&#xff0…

运维---关于服务治理Nacos的快问快答

问题:在服务治理中,服务提供者、服务消费者和注册中心分别承担着怎样的角色? 回答: 服务提供者主要负责暴露服务接口,以供其他服务进行调用。 服务消费者的职责是调用其他服务所提供的接口。 注册中心则承担着记录…

【机器学习】(基础篇一) —— 什么是机器学习

什么是机器学习 本系列博客为你从机器学习的介绍开始,使用大量的代码实战和验证,最终帮助你完全掌握什么是机器学习 人工智能、机器学习和深度学习的关系 人工智能(Artificial Intelligence,AI):是一门研…

Java多线程不会?一文解决——

方法一 新建类如MyThread继承Thread类重写run()方法再通过new MyThread类来新建线程通过start方法启动新线程 案例&#xff1a; class MyThread extends Thread {public MyThread(String name) {super(name);}Overridepublic void run() {for(int i0;i<10;i){System.out.…

react dangerouslySetInnerHTML将html字符串以变量方式插入页面,点击后出现编辑状态

1.插入变量 出现以下编辑状态 2.解决 给展示富文本的标签添加css样式 pointerEvents: none

黑马点评,生成1000个token到redis代码和1k个token的文件

原来的sql文件里面就可以插入1k个用户&#xff0c; 这个代码是从1000个User列表里面生成1k个token到redis里面 ResourceIUserService userService;Resource private StringRedisTemplate stringRedisTemplate;Testpublic void testGetAll() {List<User> users userServ…

activemq推数据给前端的方式

文章目录 消费者程序接收消息并通过 WebSocket 将消息传递给前端 消费者程序接收消息并通过 WebSocket 将消息传递给前端 ActiveMQ 是一个开源的消息代理服务&#xff0c;可以用来实现各种消息传递模式&#xff0c;包括点对点和发布/订阅模型。要将数据从 ActiveMQ 推送到前端…

那些年背过的面试题——MySQL篇

本文是技术人面试系列 MySQL 篇&#xff0c;面试中关于 MySQL 都需要了解哪些基础&#xff1f;一文带你详细了解&#xff0c;欢迎收藏&#xff01; WhyMysql&#xff1f; NoSQL 数据库四大家族 列存储 Hbase K-V 存储 Redis 图像存储 Neo4j 文档存储 MongoDB 云存储 OSS …

AI大模型的智能心脏:向量数据库的崛起

在人工智能的飞速发展中,一个关键技术正悄然成为AI大模型的智能心脏——向量数据库。它不仅是数据存储和管理的革命性工具,更是AI技术突破的核心。随着AI大模型在各个领域的广泛应用,向量数据库的重要性日益凸显。 01 技术突破:向量数据库的内在力量 向量数据库以其快速检索…

第3章 配置 Vite

1 基本配置 Vite 的配置文件 vite.config.js 是基于 JavaScript 或 TypeScript 的文件&#xff0c;可以使用 ES 模块语法进行导出。Vite 通过这个配置文件来调整各种构建和开发的选项。 1.1 创建配置文件 在项目根目录创建 vite.config.js 文件&#xff1a; // vite.config…

RNN、LSTM与GRU循环神经网络的深度探索与实战

循环神经网络RNN、LSTM、GRU 一、引言1.1 序列数据的迷宫探索者&#xff1a;循环神经网络&#xff08;RNN&#xff09;概览1.2 深度探索的阶梯&#xff1a;LSTM与GRU的崛起1.3 撰写本博客的目的与意义 二、循环神经网络&#xff08;RNN&#xff09;基础2.1 定义与原理2.1.1 RNN…

【Python】组合数据类型:序列,列表,元组,字典,集合

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言组合数据类型序列类型序列常见的操作符列表列表操作len()append()insert()remove()index()sort()reverse()count() 元组三种序列类型的区别 集合类型四种操作符集合setfrozens…

【CSS in Depth 2精译】2.5 无单位的数值与行高

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高 ✔️2.6 自定义属性2.7 本章小结 2.5 无单位的数值与行高 有些属性允许使用无单位的数值&#xff08;unitless value…

【数据结构与算法】快速排序挖坑法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

前端面试题16(跨域问题)

跨域问题源于浏览器的同源策略&#xff08;Same-origin policy&#xff09;&#xff0c;这一策略限制了来自不同源的“写”操作&#xff08;比如更新、删除数据等&#xff09;&#xff0c;同时也限制了读操作。当一个网页尝试请求与自身来源不同的资源时&#xff0c;浏览器会阻…

网络配置文件中type

在网络配置文件中&#xff0c;type是一个参数&#xff0c;用于指定网络接口的类型。它指定了网络接口所使用的协议或技术。 以下是一些常见的type参数值&#xff1a; “ethernet”&#xff1a;表示以太网接口&#xff0c;用于连接以太网设备&#xff0c;如有线网卡。 “wifi”…

Python实现ABC人工蜂群优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化…

PD虚拟机不能复制Mac的文件怎么回事 PD虚拟机不能复制Mac的文件怎么办 Parallels Desktop怎么用

PD虚拟机不仅能提供跨系统协作的服务&#xff0c;还能进行虚拟机系统与原生系统间的文件共享、文本复制、文件复制等操作&#xff0c;让系统间的资源可以科学利用。但在实际操作过程中&#xff0c;PD虚拟机不能复制Mac的文件怎么回事&#xff1f;PD虚拟机不能复制Mac的文件怎么…

linux centos7.9 安装mysql5.7;root设置客户端登录、配置并发、表名大小写敏感等

查看centos版本 cat /etc/centos-releasecentos版本为7.9 查看是否已安装mariadb,安装了需要先删除 1.查看是否安装了mariadb和mysql,安装了需要先删除 mariadb是mysql的一个分支,但要安装mysql需要删除它 执行rpm -qa|grep mariadb,查看mariadb情况 查找到有就删除 执行…