云原生运维实战 | 快速解决高可用K8s集群证书到期问题

news/2024/5/10 1:53:11/文章来源:https://blog.csdn.net/u013072756/article/details/131467758

欢迎关注「全栈工程师修炼指南」公众号

设为星标⭐每天带你 基础入门 到 进阶实践 再到 放弃学习

专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享

  花开堪折直须折,莫待无花空折枝 


作者主页:[ https://www.weiyigeek.top ]  

博客:[ https://blog.weiyigeek.top ]

作者<安全开发运维>答疑交流群,回复【学习交流群】即可加入


测试环境K8S集群节点信息:

kubectl get node
NAME                 STATUS   ROLES                  AGE    VERSION
devtest-master-212   Ready    control-plane,master   379d   v1.23.7
devtest-master-213   Ready    control-plane,master   379d   v1.23.7
devtest-master-214   Ready    control-plane,master   379d   v1.23.7
devtest-work-215     Ready    work                   379d   v1.23.7

0x00 Master 控制平面节点证书更新流程

Step 1. 在生产服务器上任何时候都要先备份再操作(非常重要)

mkdir ~/.backup/
cp -a /etc/kubernetes  ~/.backup/
cp -a /var/lib/kubelet/pki  ~/.backup/

Step 2.Kubernetes 集群证书过期错误提示信息:

$ kubectl get pod
Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2023-06-29T14:47:26+08:00 is after 2023-06-15T05:08:19Z$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.7", GitCommit:"42c05a547468804b2053ecf60a3bd15560362fc2", GitTreeState:"clean", BuildDate:"2022-05-24T12:30:55Z", GoVersion:"go1.17.10", Compiler:"gc", Platform:"linux/amd64"}

Step 3.检查节点证书过期时间(在所有控制平面[Master]节点执行)

# 正式版本
kubeadm certs check-expiration
# alpha 版本
kubeadm alpha certs check-expiration## 如下所示证书于 2023 年 6 月 15 日到期,当前时间 2023年6月29日 16:36:39
# CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
# admin.conf                 Jun 15, 2023 05:05 UTC   <invalid>       ca                      no
# apiserver                  Jun 15, 2023 05:05 UTC   <invalid>       ca                      no
# apiserver-etcd-client      Jun 15, 2023 05:05 UTC   <invalid>       etcd-ca                 no
# apiserver-kubelet-client   Jun 15, 2023 05:05 UTC   <invalid>       ca                      no
# controller-manager.conf    Jun 15, 2023 05:05 UTC   <invalid>       ca                      no
# etcd-healthcheck-client    Jun 15, 2023 05:05 UTC   <invalid>       etcd-ca                 no
# etcd-peer                  Jun 15, 2023 05:05 UTC   <invalid>       etcd-ca                 no
# etcd-server                Jun 15, 2023 05:05 UTC   <invalid>       etcd-ca                 no
# front-proxy-client         Jun 15, 2023 05:05 UTC   <invalid>       front-proxy-ca          no
# scheduler.conf             Jun 15, 2023 05:05 UTC   <invalid>       ca                      no# CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
# ca                      Jun 12, 2032 04:54 UTC   8y              no
# etcd-ca                 Jun 12, 2032 04:54 UTC   8y              no
# front-proxy-ca          Jun 12, 2032 04:54 UTC   8y              no

Step 4.更新节点证书(在所有控制平面[Master]节点执行)

# 正式版本
kubeadm certs renew all# alpha 版本
kubeadm alpha certs renew all# 关键点: 此处由于我们是部署在k8s集群中使用daemonsets.apps控制进行运行在各master节点上
Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.

Step 5.由于动态证书重载目前还不被所有组件支持,所以重启各控制平面 daemonsets.apps 管理的pod即kube-apiserver, kube-controller-manager, kube-scheduler and etcd。(在所有控制平面[Master]节点执行)
注意: 上述静态 Pods 是被本地 kubelet 而不是 API Server 管理, 所以 kubectl 不能用来删除或重启他们,只能临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒(参考 KubeletConfiguration 结构 中的fileCheckFrequency 值), 等待pod终止后再将配置清单移会原始目录,然后kubelet将会重建这些Pod。

# 备份文件,移除 daemonsets.apps 资源配置清单
mkdir /tmp/k8s
mv /etc/kubernetes/manifests/*yaml /tmp/k8s# 检查节点上 pod 运行情况,等待上述 Pod 全部终止
crictl ps# 将配置清单移会原始目录
mv //tmp/k8s/*yaml  /etc/kubernetes/manifests# 等待20秒后再次查看Pod是否运行
crictl ps | grep "devtest-master-213"
# 或者通过 
kubectl get pod -n kube-system | grep 214

Step 6.更新kubectl使用的配置文件 (在所有控制平面[Master]节点执行,其他master节点可选)

# 重新生成 /etc/kubenetes 目录下的 conf 文件 (主节点执行一次即可)
# kubeadm init --kubernetes-version=v1.23.7 phase kubeconfig allcp -a /etc/kubernetes/admin.conf ~/.kube/config

Step 7.重启控制节点上的 kubelet 服务。

# 重启服务
systemctl restart kubelet# 查看 kubelet-client-current.pem 、kubelet-server-current.pem 证书文件起始时间是否改变
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -text | grep Not

Step 8.若kuebelt证书未更新,我们需要在集群证书签名请求CSR中进行批准。

# 查看节点的CSR请求
kubectl get csr | grep "213"# csr-q4kz8   30m    kubernetes.io/kubelet-serving         system:node:devtest-master-213   <none>   Approved,Issued# 批准节点的CSR请求
kubectl certificate approve csr-q4kz8 # csr-q4kz8   30m    kubernetes.io/kubelet-serving         system:node:devtest-master-213   <none>   Pendding$ ls -alh
-rw------- 1 root root 2.8K Jun 29 15:10 kubelet-client-2023-06-29-15-10-08.pem
lrwxrwxrwx 1 root root   59 Jun 29 15:10 kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2023-06-29-15-10-08.pem
-rw-r--r-- 1 root root 2.3K Jun 15  2022 kubelet.crt
-rw------- 1 root root 1.7K Jun 15  2022 kubelet.key
-rw------- 1 root root 1.2K Jun 29 15:26 kubelet-server-2023-06-29-15-26-42.pem
lrwxrwxrwx 1 root root   59 Jun 29 15:26 kubelet-server-current.pem -> /var/lib/kubelet/pki/kubelet-server-2023-06-29-15-26-42.pem

step 9.至此完毕,九九归一。



0x02 Work 工作节点证书更新流程

# 1.在 Master 节点上生成对应work节点 kubelet.conf 配置到共享目录中
devtest-master-213 $ kubeadm init --kubernetes-version=v1.23.7 phase kubeconfig kubelet --node-name devtest-work-215 --kubeconfig-dir /mnt/nfs
[kubeconfig] Writing "kubelet.conf" kubeconfig file# 2.在对应的 Work 节点上将生成 kubelet.conf 复制 到 /etc/kubernetes/kubelet.conf 目录中
devtest-work-215 $ cp /mnt/nfs/kubelet.conf /etc/kubernetes/kubelet.conf# 3.然后重启工作节点上 kubelet 服务
devtest-work-215 $ systemctl restart kubelet# 4.在master节点上批准该节点的CSR请求
kubectl get csr | grep "215"
kubectl certificate approve csr-q28z8 # 5.验证 kubelet 客户端以及服务端证书是否更新, 如果有多台worker的话,使用类似的方法操作。
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep NotNot Before: Jun 29 08:10:39 2023 GMTNot After : Jun 28 08:10:39 2024 GMT
openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -text  |grep NotNot Before: Jun 29 08:01:19 2023 GMTNot After : Jun 28 08:01:19 2024 GMT

知识扩展,如果 /var/lib/kubelet/pki/kubelet-client-current.pem 软连接不更新解决办法如下:

# 移除旧的证书链接文件
mv /var/lib/kubelet/pki/kubelet-client-2* /tmp/k8s
mv /var/lib/kubelet/pki/kubelet-server-2* /tmp/k8s# 重启节点上的 kubelet
systemctl restart kubelet# 在 master 节点上批转CSR请求
kubectl certificate approve csr-q8as1

亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

ef403b3af5159f23e49972e36aa9adb7.jpeg


0x02 测试集群部署情况
Step 1.在master上创建pod1.yaml内容如下。

tee pod1.yaml <<'EOF'
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:blog: weiyigeek.topname: pod1
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: pod1resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
EOF

Step 2.在集群中创建此pod,并查看该POD运行状态。

kubectl apply -f pod1.yaml
kubectl get pod pod1 -o wide

9b93edb2d99ea2a4008ebe5f6ba50fa9.png


本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/

如果此篇文章对你有帮助,请你将它分享给更多的人! 

a9c3799d8c368c8eb85acc8a1ab66987.gif

61243b24cfe5e6a698efb818b3943c51.png 学习书籍推荐 往期发布文章 2d65be42f91bb44b42213809021e4849.png

公众号回复【0008】获取【Ubuntu22.04安装与加固脚本】

公众号回复【10001】获取【WinServer安全加固脚本】

公众号回复【10002】获取【KylinOS银河麒麟安全加固脚本】

公众号回复【0011】获取【k8S二进制安装部署教程】

公众号回复【0014】获取【Nginx学习之路汇总】

公众号回复【0015】获取【Jenkins学习之路汇总】

 热文推荐  

  • 还不会部署高可用的kubernetes集群?企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1.23.7

  • 企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示

  • 运维实践 | 使用K3S之快速搭建精简版本K8S集群环境,助力开发测试环境!

  • 记一次由于外部K8S集群证书到期导致Jenkins无法生成动态agent节点错误解决(入坑出坑)

欢迎长按(扫描)二维码 取更多渠道哟!

8092d96c366f2e51a66eeefdd343a8f7.gif

欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO

添加作者微信【weiyigeeker】,拉你一起学习交流吧!

关注回复【学习交流群】即可加入【安全开发运维沟通交流群

温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址 master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。

朋友点个【赞 + 在看】吧!

点击【"阅读原文"】获取更多有趣的知识!   

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

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

相关文章

(小程序)uniapp调接口完整流程

(小程序)uniapp调接口完整流程 代码&#xff1a; <script lang"ts" setup>import { ref } from "vue"; const form ref({searchVal: "", });//搜索const searchClick () > {console.log(form.value.searchVal)let data {text: form…

Redis高并发分布式锁

文章目录 高并发场景秒杀抢购超卖Bug高并发场景秒杀抢购Demo测试结果 JVM级别锁使用nginx对本地服务进行负载均衡 Redis实现分布式锁Redis分布式锁实现DemoRedis分布式锁有关问题 分布式锁性能的提升减少锁的粒度使用异步处理 高并发场景秒杀抢购超卖Bug 在今天的数字化世界中&…

Python操作SQLite数据库

文章目录 这篇博客很简单&#xff0c;简单记录下SQLite基础使用。有些数据文件是.db为扩展名的&#xff0c;要用到SQLite进行读写和增删改查操作。SQLite数据库是一种轻量级的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以单个文件的形式存储&#xff0c;整…

【数据挖掘】时间序列教程【二】

2.4 示例&#xff1a;颗粒物浓度 在本章中&#xff0c;我们将使用美国环境保护署的一些空气污染数据作为运行样本。该数据集由 2 年和 5 年空气动力学直径小于或等于 3.2017 \&#xff08;mu\&#xff09;g/m\&#xff08;^2018\&#xff09; 的颗粒物组成。 我们将特别关注来自…

优盘数据恢复怎么做?3个方法分享!

我的优盘里保存了很多有纪念意义的照片&#xff0c;但是刚刚将u盘插入电脑后&#xff0c;发现有些照片已经损坏了。我想将优盘里的数据恢复&#xff0c;有什么靠谱的方法吗&#xff1f;给我推荐一下吧&#xff01; 优盘是一种便携式存储设备&#xff0c;常用于存储和传输数据。…

Linux v4l2框架分析

1. 概述 V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供统一的接口&#xff0c;对下支持各类复杂硬件的灵活扩展&#xff1b; V4L2框架&#xff0c;主要包括v4l2-core、meida framework、videobuf2等模块&#xff0c;这也…

攻防世界-Crypto-Normal_RSA

题目描述&#xff1a;下载附件后&#xff0c;附件中只有两个文件&#xff0c;一个是加密后的密钥&#xff0c;一个是公钥文件 背景知识&#xff1a;RSA加密算法 现在相当于给出了密文和公钥&#xff0c;需要我们去求解明文 1. 思路分析 既然要解密&#xff0c;那么必须要获取…

Facebook Insights分析工具解读,掌握关键数据指标

什么是Facebook Insights&#xff1f; Facebook Insights是Facebook平台上的一项内置分析工具&#xff0c;旨在帮助企业和品牌了解其在Facebook上的表现和受众互动情况。该工具提供了丰富的数据和指标&#xff0c;可以帮助用户洞察粉丝群体、了解发布内容的表现&#xff0c;并…

Hutool 30

Hutool是一个Java工具包&#xff0c;提供了丰富的工具类库和简化开发的工具方法。它的目标是提供一套丰富、实用、高效和易用的Java工具类&#xff0c;以提升开发者的开发效率和开发质量。以下是Hutool的一些主要特点和功能模块&#xff1a; 常用工具类&#xff1a;Hutool提供了…

百度智能车竞赛丝绸之路2——手柄控制

百度智能车竞赛丝绸之路1——智能车设计与编程实现控制 百度智能车竞赛丝绸之路2——手柄控制 一、机器人设计 二、实现原理 本教程使用Python的Serial库和Struct二进制数据解析库去实现Xbox手柄百度大脑学习开发板&#xff08;上位机&#xff09;和机器人控制器&#xff08;…

你的服务器还安全吗?用户数据是否面临泄露风险?

一系列严重的网络安全事件引起了广泛关注&#xff0c;多家知名公司的服务器遭到黑客挟持&#xff0c;用户的个人数据和敏感信息面临泄露的风险。这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性&#xff0c;提醒着企业和个人加强对网络安全的重视。 一、入侵案例1.1 蔚来数据…

Pycharm中成功配置PyQt5(External Tools),设计好界面直接生成python代码

1、安装PyQt5和PyQt5-tools 在Pycharm中设置好Python环境&#xff0c;点击File-Settings-Project-Python Interpreter 设置好后退出&#xff0c;点击窗口下的Terminal&#xff0c;输入 # 直接安装输入pip install pyqt5&#xff0c;如果太慢可以用国内镜像源&#xff0c;若出…

PS扣签名

打开Photoshop CS6&#xff0c;依次点击“文件”-“打开”&#xff0c;把签名照导入进来。 在“选择”菜单下点击“色彩范围”。 此时鼠标形状变成了一支笔&#xff0c;点击签名上黑色的地方&#xff0c;适当调整颜色容差&#xff0c;点击“确定”完成选择。 按住CtrlJ组…

Postman设置断言

目录 前言&#xff1a; 一、断言的定义 二、Postman断言的语法 三、Postman中chai.js断言常用语法 前言&#xff1a; 在进行API测试时&#xff0c;断言是一项重要的功能。它能帮助我们验证接口的响应是否符合预期结果&#xff0c;从而确保API的正确性和可靠性。在Postman中…

【微服务】什么是微服务?-- 全面了解微服务架构

What is Microservices — Edureka 您有没有想过&#xff0c;什么是微服务以及扩展行业如何与它们集成&#xff0c;同时构建应用程序以满足客户的期望&#xff1f; 要了解什么是微服务&#xff0c;您必须了解如何将单体应用程序分解为独立打包和部署的小型微型应用程序。本文将…

Electron + ts + vue3 + vite 项目搭建

Electron 是一个基于 Chromium 和 Node.js 的桌面应用程序开发框架&#xff0c;而 Vue3 则是一种流行的前端框架。将两者结合使用可以快速地打造出跨平台的桌面应用程序。在这种组合中&#xff0c;Electron 提供了强大的桌面应用开发能力&#xff0c;而 Vue3 则提供了易用的 UI…

【2023年江西省研究生数学建模竞赛】题目一 蒸汽发生器倒U型管内液体流动 建模方案及参考文献

代码与结果如下&#xff1a;完整文档见文末 完整思路”请点击这里“到原文章获取 题目&#xff1a; PACTEL压水堆整体测试设备在2009年建造&#xff0c;用于带有垂直倒U型管蒸汽发生器的压水堆热液压相关的安全性研究,参见图1。 PACTEL压水堆设施包括一个反应堆压力容器模型…

机器学习技术(一)——python基础超详解

机器学习技术&#xff08;一&#xff09;——python基础超详解 文章目录 机器学习技术&#xff08;一&#xff09;——python基础超详解0、引言1、基础概念**:snake:变量****:snake:注释****:snake:输入 输出** 2、数据类型**:snake:数值类型****:snake:运算符****:snake:字符串…

Matlab论文插图绘制模板第106期—带误差棒的堆叠柱状图

在之前的文章中&#xff0c;分享了Matlab带误差棒的折线图绘制模板&#xff1a; 带误差棒的柱状图绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带误差棒的堆叠柱状图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源…