K8s 集群(kubeadm) CA 证书过期解决方案

news2024/12/23 13:28:11

k8s-adm

Author:Arsen
Date:2024/07/04


目录

    • 一、现象描述
    • 二、解决方案
    • 三、集群验证


一、现象描述

之前有篇文章《K8s Token 过期解决方案(Kubeadm)》提到了默认生成的 Token 有效期只有 24 小时,过期后 Token 将不可用,如果想新的 Node 节点加入 K8s 集群,则需重新生成新的 Token。

今天无意间打开我虚拟机部署的 K8s 集群(通过 kubeadm 方式部署),发现 CA 证书过期了(如下图):

kubectl get pods

image-20240704153715854

于是查看我的 K8s 集群证书,显示证书都过期了(如下图):

# 查看证书过期时间 => k8s1.15+版本的查看方法
kubeadm certs check-expiration

image-20240704142609767

字段说明:

字段解释
CERTIFICATE证书的名称
EXPIRES证书过期的时间点
RESIDUAL TIME当前时间距离证书过期的剩余时间
CERTIFICATE AUTHORITY证书的颁发机构
EXTERNALLY MANAGED证书是否由外部系统管理

证书字段详解:

CERTIFICATEEXPIRESRESIDUAL TIMECERTIFICATE AUTHORITYEXTERNALLY MANAGED备注
admin.confDec 12, 2023 03:36 UTCcanoKubeconfig 文件,包含集群访问的配置
apiserverDec 12, 2023 03:36 UTCcanoKubernetes API 服务器的证书
apiserver-etcd-clientDec 12, 2023 03:36 UTCetcd-canoAPI 服务器与 ETCD 之间的客户端证书
apiserver-kubelet-clientDec 12, 2023 03:36 UTCcanoAPI 服务器与 Kubelet 之间的客户端证书
controller-manager.confDec 12, 2023 03:36 UTCcanoKubernetes 控制器管理器的 Kubeconfig 文件
etcd-healthcheck-clientDec 12, 2023 03:36 UTCetcd-cano用于 ETCD 健康检查的客户端证书
etcd-peerDec 12, 2023 03:36 UTCetcd-canoETCD 节点间的对等通信证书
etcd-serverDec 12, 2023 03:36 UTCetcd-canoETCD 服务器的证书
front-proxy-clientDec 12, 2023 03:36 UTCfront-proxy-cano前端代理的客户端证书
scheduler.confDec 12, 2023 03:36 UTCcanoKubernetes 调度器的 Kubeconfig 文件

显然,上表中的这些证书在 2023 年 12 月 12 日 03:36 UTC 就已经过期,且剩余时间为<invalid>,表示这些证书已过期(无效),需要重新生成。

证书颁发机构字段解释:

CERTIFICATE AUTHORITYEXPIRESRESIDUAL TIMEEXTERNALLY MANAGED备注
caDec 09, 2032 03:36 UTC8年noKubernetes 的主证书颁发机构
etcd-caDec 09, 2032 03:36 UTC8年noETCD 的证书颁发机构
front-proxy-caDec 09, 2032 03:36 UTC8年no前端代理的证书颁发机构

二、解决方案

1、对过期证书进行备份,并删除旧的证书

# 备份证书
cp -rp /etc/kubernetes /etc/kubernetes.bak

# 删除旧的证书(使用新版本的新命令生成证书时可以忽略这一步,即可以不用删除)
# rm -f /etc/kubernetes/pki/apiserver*
# rm -f /etc/kubernetes/pki/front-proxy-client.*
# rm -rf /etc/kubernetes/pki/etcd/healthcheck-client.*
# rm -rf /etc/kubernetes/pki/etcd/server.*
# rm -rf /etc/kubernetes/pki/etcd/peer.*

2、重新生成证书

# 新版本(1.15+) - - 使用该命令不用提前删除过期证书
kubeadm certs renew all

# 老版本
# kubeadm alpha certs renew all

image-20240704144738457

3、备份旧的配置文件,并重新生成新的配置文件

mv /etc/kubernetes/*.conf /tmp/

# 新版本(1.15+)
kubeadm init phase kubeconfig all

# 老版本
# kubeadm alpha phase kubeconfig all

image-20240704144929550

4、更新 kubectl 配置

# 备份配置文件
cp -rp ~/.kube/config ~/.kube/config.bak

# 更新配置文件
\cp /etc/kubernetes/admin.conf ~/.kube/config

# 修改权限
chown $(id -u):$(id -g) $HOME/.kube/config

5、证书过期时间确认

# 新版本(1.15+)查看方法
kubeadm certs check-expiration

# 单独查看(其他同理)
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep 'Not'

# 老版本查看方法
# kubeadm alpha certs check-expiration

image-20240704155002524

CA 证书时间已经更新,

6、重启 kubelet

所有 work 节点执行,如果你的 master 节点也作为 work 节点使用,那 master 节点也需要执行重启 kubelet 的操作。

systemctl restart kubelet
systemctl status kubelet

7、查看集群节点状态

image-20240704213044612

发现 work 节点不健康,这个时候我们需要重新将work 节点加入 k8s 集群

1)先查看集群中是否有 Token

kubeadm token list

image-20240704213334228

2)没有则重新生成 Token

# 生成默认 24 小时 Token(推荐)
kubeadm token create

# 生成永久有效 Token
# kubeadm token create --ttl 0

image-20240704213514382

3)获取 CA 证书 Hash 值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

image-20240704213606235

4)最后就是 work 节点加入 K8s 集群

以 work1 节点为例,work2 节点及其他 work 节点同理。

# 填入上图生成的 token、hash 值,并加入集群。
kubeadm join 192.168.56.160:6443 --token zlj5j5.3ezp1s8drj3jgept --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4

执行后报错:

image-20240704214147260

报错原因:这些文件为旧文件(过期的文件),我们备份后清理即可

# 备份
cp -a /etc/kubernetes/kubelet.conf /tmp/kubelet.conf.back
cp -a /etc/kubernetes/pki/ca.crt /tmp/ca.crt.back

# 清理
rm -f /etc/kubernetes/kubelet.conf
rm -f /etc/kubernetes/pki/ca.crt

清理完成后,再次将 work 节点加入集群:

kubeadm join 192.168.56.160:6443 --token zlj5j5.3ezp1s8drj3jgept --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4

image-20240704214527787

8、查看 k8s 集群节点健康状态

kubectl get nodes

image-20240704214840263

9、最后再验证以下证书过期时间

kubeadm certs check-expiration

image-20240704215014780

无误后,K8s 集群的 CA 证书更新完毕,此时打一个快照(因为我是虚拟机),方便后续实验所用。

三、集群验证

K8s 集群证书过期时间更新完毕后,且集群节点也是健康的状态,那接下来我们跑一个测试服务验证一下集群是否可用。

kubectl create deployment nginx --image=nginx   # 创建单副本作为测试即可
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

image-20240704215819509

image-20240704215754156

浏览器访问验证:http://192.168.56.160:31122/

image-20240704215918255

再看看 pod 所在 work 节点:调度也是没问题的。

image-20240704220030579

至此,K8s 集群验证完毕!

—END

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

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

相关文章

Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读

论文笔记 资料 1.代码地址 https://github.com/BIT-DA/RoTTA 2.论文地址 https://arxiv.org/abs/2303.13899 3.数据集地址 coming soon 1论文摘要的翻译 测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在…

实现统计n个数以下质数的个数

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int n 0;scanf("%d", &n);int sum 0;for (int i 1; i < n; i){for (int j 2; j < i; j) {if (i % j 0){sum;break;}}}printf("%d", n - sum-1);return 0; } n为输…

数字媒体技术基础之:DNG 文件

DNG&#xff08;Digital Negative&#xff09;文件是一种用于存储原始图像数据的文件格式&#xff0c;由 Adobe Systems 于2004年开发并推广。DNG 是一种开放的、非专利的原始图像格式&#xff0c;旨在为不同相机制造商提供一个统一的存储格式。DNG 文件保存了原始的、未处理的…

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化&#xff0c;默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数&#xff0c;但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入&#xff0c;保存和不保存…

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

第29天&#xff0c;贪心part03&#xff0c;快过半了(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解&#xff1a;代码随想录加油站 视频讲解&#xff1a;手撕加油站…

2.2 ROS2话题通信

场景 话题通信是ROS中使用频率最高的一种通信模式&#xff0c;话题通信是基于发布订阅模式的&#xff0c;也即&#xff1a;一个节点发布消息&#xff0c;另一个节点订阅该消息。话题通信的应用场景也极其广泛&#xff0c;比如如下场景&#xff1a; 机器人在执行导航功能&#…

5个文章生成器免费版,自动写作文章更轻松

在这个信息如洪流般涌动的时代&#xff0c;写作所具有的重要性不言而喻。不管是学生需要完成的作业&#xff0c;还是职场人士得提交的报告&#xff0c;亦或是自媒体创作者必须输出的内容&#xff0c;都迫切要求我们具备一定的写作技能。然而&#xff0c;写作对很多人来说&#…

基于 STM32 的智能睡眠呼吸监测系统设计

本设计的硬件构成&#xff1a; STM32F103C8T6单片机最小系统板&#xff08;包含3.3V稳压电路时钟晶振电路复位电路&#xff08;上电自复位&#xff0c;手动复位&#xff09;&#xff09;&#xff0c;心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成…

Nettyの网络聊天室扩展序列化算法

1、网络聊天室综合案例 客户端初始代码&#xff1a; Slf4j public class ChatClient {public static void main(String[] args) {NioEventLoopGroup group new NioEventLoopGroup();LoggingHandler LOGGING_HANDLER new LoggingHandler(LogLevel.DEBUG);MessageCodecSharabl…

2024-07-04 base SAS programming学习笔记8(HTML)

当使用ODS来进行结果或数据集输出的时候&#xff0c;可以同时设置多个ODS 命令&#xff0c;同时输出到多个不同的文件。使用_ALL_ 表示关闭所有的ODS输出窗口&#xff0c;比如&#xff1a; ods html file(body)"html-file-pathname"; ods html file"pdf-file-pa…

【Ubuntu24.04无显示器远控】【Todesk远程桌面黑屏】【Linux虚拟显示器】解决方案

1️⃣版本 Ubuntu 24.04Todesk 4.7.2.0xserver-xorg-video-dummy 1:0.4.0-1build1 2️⃣安装配置虚拟显示器 sudo apt install xserver-xorg-video-dummy编辑/etc/gdm3/custom.conf&#xff0c;关闭Ubuntu24.04Wayland切换为X11 WaylandEnablefalse /usr/share/X11/xorg.con…

Python 插入、替换、提取、或删除Excel中的图片

Excel是主要用于处理表格和数据的工具&#xff0c;我们也能在其中插入、编辑或管理图片&#xff0c;为工作表增添视觉效果&#xff0c;提升报告的吸引力。本文将详细介绍如何使用Python操作Excel中的图片&#xff0c;包含以下4个基础示例&#xff1a; 文章目录 Python 在Excel…

三菱PLC标签使用(I/O的映射)与内容

今天&#xff0c;小编继续开始三菱PLC的学习&#xff0c;今天的内容是标签及其标签的内容说明&#xff0c;如果对你有帮助&#xff0c;欢迎评论收藏。 标签的种类&#xff0c;等级&#xff0c;定义 种类 三菱3U的PLC的种类分别为二种&#xff1a;全局标签与局部标签 全局标签…

新火种AI|AI搜索挑战百度谷歌,重塑信息检索的市场?

作者&#xff1a;一号 编辑&#xff1a;美美 AI正在颠覆传统的搜索引擎市场。 随着ChatGPT等大型语言模型的火爆&#xff0c;AI搜索技术成为了公众和业界关注的焦点。这些技术不仅能够提供快速、准确的信息检索&#xff0c;还能够通过自然语言处理技术理解用户的复杂查询&am…

Java项目:基于SSM框架实现的毕业论文管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的毕业论文管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

【全网最全】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

微信小程序毕业设计-球馆预约系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

系统级应用锁的实现方法

前言: 应用锁是一种常见的需求&#xff0c; 下面提供一个个人认为还比较完美的解决方法。本篇从两个方面详述应用锁的实现方法。 一. 流程图 二. 实现细节 一.流程图 二. 实现效果及细节

Dungeonborne联机失败、延迟高、卡顿的解决方法

Dungeonborne将第一人称动作的即时性与经典的西幻RPG职业设计巧妙融合&#xff0c;为玩家带来了一场前所未有的游戏体验。在这款沉浸式第一人称PvPvE地下城探险游戏中&#xff0c;我们可以独自深入探索&#xff0c;也可以与值得信赖的伙伴并肩作战&#xff0c;共同揭开地下城的…

Proteus-51单片机-DS18B20多点测温

DS18B20多点测温 一、Proteus仿真演示 每个DS18B20都有一个唯一的64位序列号,这使得在同一总线上可以挂载多个传感器,无需额外的地址分配。主机(通常为单片机)通过特定的时序控制,可以依次读取各个DS18B20的温度数据,实现分布式测温。 二、代码特点 三、开发环境介绍 本…