kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决

news2025/2/22 1:06:25

kubeadm拉起的k8s集群证书过期的做法

  • 这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。
    • 有时候有很多部门提了建k8s的需求,有些是临时的,有些没有说具体用多久,但是某天,他们和你说集群坏了,这时候你上去一看证书过期了,这里又有两种情况我们分别说明:
      • 集群还活着
      • 集群已归西
        • 1、备份数据
        • 2、报错内容及分析
        • 3、生成证书
        • 4、证书内容合并
        • 5、证书替换
        • 6、证书生效

这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。

有时候有很多部门提了建k8s的需求,有些是临时的,有些没有说具体用多久,但是某天,他们和你说集群坏了,这时候你上去一看证书过期了,这里又有两种情况我们分别说明:

集群还活着
集群已归西(麻烦事儿)

集群还活着

#查看证书过期时间
kubeadm certs check-expiration

#如果过期就更新
kubeadm certs renew all

#更新完证书再次查看
kubeadm certs check-expiration

#更新完证书后还需要重启api-server,controller-manager,scheduler,etcd

#看看有没有这个文件
ll /etc/crictl.yaml

#没有就主动生成
echo "runtime-endpoint: unix:///run/containerd/containerd.sock" \
    |  tee /etc/crictl.yaml

containerd执行脚本更新相关服务
pods="crictl pods --namespace kube-system --state READY"
for component in  kube-apiserver kube-controller-manager kube-scheduler etcd; do
    echo "> `date +%DT%T` Restart $component"
    $pods | grep "$component" | awk '{print "crictl stopp "$1 | "sh"}'
    sleep 5
    echo "---------------------------------------"
done

使用kubectl获取集群资源看是否正常。

集群已归西

此时集群无法连接、无法管理,甚至无法启动

1、备份数据
mkdir ~/recovery

sudo rsync -av /etc/kubernetes/ ~/recovery/etc-kubernetes/

sudo rsync -av /var/lib/etcd/ ~/recovery/var-lib-etcd/

sudo rsync -av /var/lib/kubelet/ ~/recovery/var-lib-kubelet/
2、报错内容及分析
journalctl -u kubelet.service
kubelet[2447]: E0923 bootstrap.go:265]  part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: xxxxxxxxx

显而易见,kubelet 使用的证书过期了

查看 /etc/kubernetes/kubelet.conf 内容,看它使用的证书文件路径

users:
- name: system:node:xxxx
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

接着进入 /var/lib/kubelet/pki kubelet 的证书、私钥都在这里,而且还有一个 kubelet.conf 引用的 pem 文件

.crt + .key = .pem

接着解析 kubelet.crt 内容

openssl x509 -in kubelet/pki/kubelet.crt -noout -text

Certificate:
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=kubernetes
        Validity
            Not Before: Jan  6 15:53:54 2022 GMT
            Not After : Jan  6 15:53:54 2023 GMT
        Subject: O=system:nodes, CN=system:node:vm-m1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:vm-m1

主机名是 vm-m1,被 CN 和 DNS 用到

Subject 格式 O=system:nodes, CN=system:node:${主机名}
DNS 格式 ${主机名}
3、生成证书

由于过期的是 kubelet 使用的证书,而 ca 没过期,因此基于已有 ca 生成证书

node_name=vm-m1

#生成 EC 私钥 (P-256 椭圆曲线)
openssl ecparam -genkey -name prime256v1 -noout -out kubelet.key

#创建证书签署请求 (CSR)
openssl req -new -key kubelet.key -out kubelet.csr -subj "/O=system:nodes/CN=system:node:${node_name}"

#引用已有 ca,生成 crt 证书
openssl x509 -req -in kubelet.csr \
    -CA /etc/kubernetes/pki/ca.crt \
    -CAkey /etc/kubernetes/pki/ca.key \
    -CAcreateserial \
    -out kubelet.crt \
    -days 365 \
    -extensions v3_req \
    -extfile <(cat <<EOF
[ v3_req ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = ${node_name}
EOF
)
4、证书内容合并

date_time= ( d a t e + c a t k u b e l e t . c r t > k u b e l e t − c l i e n t − (date +%F-%H-%M-%S) cat kubelet.crt > kubelet-client- (date+catkubelet.crt>kubeletclient{date_time}.pem
cat kubelet.key >> kubelet-client-${date_time}.pem

5、证书替换
systemctl stop kubelet.service

cp -vf kubelet.crt kubelet.key /var/lib/kubelet/pki/

cd /var/lib/kubelet/pki/

ln -sf /var/lib/kubelet/pki/kubelet-client-${date_time}.pem kubelet-client-current.pem 

systemctl start kubelet.service
6、证书生效

当然这个场景下也得同步更新其他组件的证书

kubeadm certs renew all

接着刷新各个组件使用的证书,更建议直接 reboot 刷新

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

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

相关文章

Ubuntu:20.04更新cmake到更高版本

从输出信息可以看出&#xff0c;您当前的系统中已经安装了 cmake&#xff0c;但版本是 3.16.3&#xff0c;而您的项目需要 CMake 3.18 或更高版本。默认情况下&#xff0c;Ubuntu 20.04 的官方软件仓库中提供的 CMake 版本较低&#xff08;如 3.16.3&#xff09;&#xff0c;因…

php 系统命令执行及绕过

文章目录 php的基础概念php的基础语法1. PHP 基本语法结构2. PHP 变量3.输出数据4.数组5.超全局变量6.文件操作 php的命令执行可以执行命令的函数命令执行绕过利用代码中命令&#xff08;如ls&#xff09;执行命令替换过滤过滤特定字符串神技&#xff1a;利用base64编码解码的绕…

论文笔记-WSDM2024-LLMRec

论文笔记-WSDM2024-LLMRec: Large Language Models with Graph Augmentation for Recommendation LLMRec: 基于图增强的大模型推荐摘要1.引言2.前言2.1使用图嵌入推荐2.2使用辅助信息推荐2.3使用数据增强推荐 3.方法3.1LLM作为隐式反馈增强器3.2基于LLM的辅助信息增强3.2.1用户…

计算四个锚点TOA定位中GDOP的详细步骤和MATLAB例程

该MATLAB代码演示了在三维空间中,使用四个锚点的TOA(到达时间)定位技术计算几何精度衰减因子(GDOP)的过程。如需帮助,或有导航、定位滤波相关的代码定制需求,请联系作者 文章目录 DOP计算原理MATLAB例程运行结果示例关键点说明扩展方向另有文章: 多锚点Wi-Fi定位和基站…

Lookup Join显著增强,Paimon1.0版本如何做的?

Hi&#xff0c;大家好&#xff0c;我们又满血复活了。 2025年开年更新频率不快&#xff0c;一方面是大模型如火如荼&#xff0c;也一直在补相关知识&#xff1b;另外一方面&#xff0c;新的一年里身体健康被我摆到了第一位&#xff0c;不会像前几年那么卷了。 后续我们的更新会…

Vue前端开发-Vant组件之Button组件

Vant 有丰富的UI组件&#xff0c;而基础组件是全部组件的核心&#xff0c;基础组件中将常用的元素做了二次的开发&#xff0c;封装成Vant格式组件&#xff0c;如按钮、图片和布局等&#xff0c;这些封装后的Vant组件&#xff0c;提供了更多面向实际应用的属性和事件&#xff0c…

DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)

前言 在当今数字化时代&#xff0c;AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型&#xff0c;凭借其出色的性能和开源免费的优势&#xff0c;成为许多开发者的首选。今天&#xff0c;就让我们一起探索如何将DeepSeek接入PyCharm&#xff0c;实现高效、智…

【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

健康养生:从生活细节开启活力之旅

在忙碌的现代生活里&#xff0c;健康养生不再是一个抽象概念&#xff0c;而是关乎生活质量的关键。其实&#xff0c;只要掌握日常养生要点&#xff0c;就能轻松开启活力满满的健康生活。 饮食是健康的基石。每日饮食需遵循 “彩虹原则”&#xff0c;摄入多种颜色食物。早餐时&…

DeepSeek + Mermaid编辑器——常规绘图

下面这张图出自&#xff1a;由清华大学出品的 《DeepSeek&#xff1a;从入门到精通》。 作为纯文本生成模型&#xff0c;DeepSeek虽不具备多媒体内容生成接口&#xff0c;但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作&#xff0c;最终…

【拥抱AI】GPT Researcher的诞生

一、GPT Researcher 研究过程总结 GPT Researcher 是一个开源的自主智能体&#xff0c;旨在通过利用人工智能技术实现高效、全面且客观的在线研究。它通过一系列创新的设计和优化&#xff0c;解决了传统研究工具&#xff08;如 AutoGPT&#xff09;中存在的问题&#xff0c;如…

Redis7——基础篇(三)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09; 接上期内容&#xff1a;上期完成了Redis的基本…

MySQL登录问题总结

不管何种数据库&#xff0c;使用的第一步都是先登录。 MySQL命令行登录语句&#xff1a;mysql -u username -P port -p -D database_name 登录MySQL的报错一般从报错信息都能得到反馈&#xff0c;常见报错原因分析如下&#xff0c;实例中的以test用户为例&#xff0c;登录环境为…

Redis 持久化:从零到掌握

Redis 作为一款广泛使用的内存数据库&#xff0c;虽然核心功能是基于内存提供高性能的数据存取&#xff0c;但在实际应用中&#xff0c;数据的持久化是不可忽视的。毕竟&#xff0c;内存中的数据一旦出现故障或重启&#xff0c;就会面临数据丢失的风险。因此&#xff0c;Redis …

Mybatis MyBatis框架的缓存 一级缓存

1. 缓存的概念 缓存的概念 在内存中临时存储数据&#xff0c;速度快&#xff0c;可以减少数据库的访问次数。经常需要查询&#xff0c;不经常修改的数据&#xff0c;不是特别重要的数据都适合于存储到缓存中。 2.Mybatis缓存 mybatis包含了一个非常强大的查询缓存特性&#…

第1章大型互联网公司的基础架构——1.6 RPC服务

你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务&#xff0c;两者的定位不一样。一般来说&#xff0c;一个业务场景的核心逻辑都是在RPC服务中实现的&#xff0c;强调的是服务于后台系统内部&#xff0c;所谓的“微服务”主要指的就是RPC服务&#xff1b;而HTTP服…

idea-gradle打包运行配置

最近接触了一个项目&#xff0c;使用gradle做为构建工具&#xff0c;这里记录一波&#xff0c;毕竟平时使用的都是maven idea 配置 这里有个坑&#xff0c;Gradle Wrapper&#xff0c;配置的地址gradle下载超时 这个配置修改成阿里的 第一张 第二张 第二张配置的jvm貌似没啥用…

(新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)

物联网实践教程&#xff1a;微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意&#xff1a;ESP-01sWIFI模块&#xff0c;去搜了一下这个小东西很有玩点&#xff0c;远程控制LED啥的&#xff0c;然后我就想…

一键部署开源DeepSeek并集成到钉钉

一键部署开源DeepSeek并集成到钉钉 简介&#xff1a; DeepSeek发布了两款先进AI模型V3和R1&#xff0c;分别适用于对话AI、内容生成及推理任务。由于官方API流量限制&#xff0c;阿里云推出了私有化部署方案&#xff0c;无需编写代码即可完成部署&#xff0c;并通过计算巢AppF…

【爬虫基础】第一部分 网络通讯 P1/3

前言 1.知识点碎片化&#xff1a;每个网站实现的技术相似但是有区别&#xff0c;要求我们根据不同的网站使用不同的应对手段。主要是常用的一些网站爬取技术。 2.学习难度&#xff1a;入门比web简单&#xff0c;但后期难度要比web难&#xff0c;在于爬虫工程师与网站开发及运维…