【Kubernetes集群证书续签】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录


前言

K8S集群证书是保障各组件间安全通信的核心要素,一旦过期将导致集群服务不可用。本文档基于三主两从的高可用集群架构,系统梳理证书更新的两种场景操作流程:集群正常运行时的证书到期前主动续签,以及证书已过期导致集群瘫痪时的紧急恢复方案,帮助运维人员从容应对证书生命周期管理

我的实验环境:

主机名 IP地址 作用说明
k8s-master1 192.168.13.136 K8s集群Master节点1,管理集群、执行运维命令
k8s-master2 192.168.13.137 K8s集群Master节点2,高可用冗余控制平面
k8s-master3 192.168.13.138 K8s集群Master节点3,高可用冗余控制平面
k8s-node1 192.168.13.139 K8s业务工作节点,运行业务Pod
k8s-node2 192.168.13.140 K8s业务工作节点,运行业务Pod

一、证书过期前续签

每个master都要重复下面这套操作

yaml 复制代码
## 1. 查看证书过期时间
root@k8s-master1:~# kubeadm certs check-expiration
yaml 复制代码
## 2. 备份/etc/kubernetes目录文件
root@k8s-master1:~# mkdir /tmp/etcd
root@k8s-master1:~# ls /tmp/etcd
root@k8s-master1:~# cp -r /etc/kubernetes/* /tmp/etcd
root@k8s-master1:~# ls /tmp/etcd
admin.conf  controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf

## 3. 更新所有证书
root@k8s-master1:~# kubeadm certs renew all

## 4. 查看证书过期时间
root@k8s-master1:~# kubeadm certs check-expiration
yaml 复制代码
## 5. 解码查看当前 kubectl 管理员配置端证书过期时间
root@k8s-master1:~# cat .kube/config
yaml 复制代码
## 或者直接执行这一条命令
root@k8s-master1:~# kubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' | base64 -d | openssl x509 -noout -dates
yaml 复制代码
## 6. 把集群管理员认证配置拷贝到当前用户的kubectl 默认路径
root@k8s-master1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: overwrite '/root/.kube/config'? y
yaml 复制代码
root@k8s-master1:~# kubectl get all -A | grep kube-system
yaml 复制代码
## 7. 删除当前master节点控制平面静态pod,触发kubelet自动重建,让组件加载更新后的新证书
root@k8s-master1:~# kubectl delete pod -n kube-system kube-apiserver-k8s-master1 kube-controller-manager-k8s-master1 kube-scheduler-k8s-master1 etcd-k8s-master1

当我们把所有master节点上的证书更新完成后,我们可以在worker节点上执行systemctl restart kubelet,这会强制 kubelet 重新加载新的证书,使更新立即生效

到此,k8s集群证书续签成功!

二、证书过期后续签

每个master都要重复下面这套操作

yaml 复制代码
## 1. 查看集群信息,必然报错证书过期
root@k8s-master1:~# kubectl get node
或
## 查看证书过期时间
root@k8s-master1:~# kubeadm certs check-expiration
yaml 复制代码
## 2. 备份/etc/kubernetes目录文件
root@k8s-master1:~# mkdir /tmp/etcdbak
root@k8s-master1:~# cp -r /etc/kubernetes/* /tmp/etcdbak/

## 3. 更新证书
root@k8s-master1:~# kubeadm certs renew all

## 4. 把集群管理员认证配置拷贝到当前用户的kubectl 默认路径
root@k8s-master1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: overwrite '/root/.kube/config'? y

## 5. 更新kubelet证书
root@k8s-master1:~# cat /var/lib/kubelet/pki/kubelet-client-current.pem |openssl x509 -noout -subject
subject=O = system:nodes, CN = system:node:k8s-master1
root@k8s-master1:~# kubeadm kubeconfig user --org system:nodes --client-name system:node:k8s-master1 > /etc/kubernetes/kubelet.conf

## 6. 重启kubelet
root@k8s-master1:~# systemctl restart kubelet
root@k8s-master1:~# systemctl status kubelet

上述步骤master节点都需要操作

下面续签worker节点的kubelet证书,每个worker节点都需要操作

yaml 复制代码
## 1. 续签worker节点kubelet证书
root@k8s-node1:~# cat /var/lib/kubelet/pki/kubelet-client-current.pem |openssl x509 -noout -subject
subject=O = system:nodes, CN = system:node:k8s-node1
root@k8s-master1:~# kubeadm kubeconfig user --org system:nodes --client-name system:node:k8s-node1 > node1.conf
root@k8s-master1:~# scp node1.conf root@192.168.13.139:/etc/kubernetes/kubelet.conf

## 2. 重启kubelet
root@k8s-node1:~# systemctl restart kubelet
root@k8s-node1:~# systemctl status kubelet

这样,k8s集群就恢复正常了!


注:

文中若有疏漏,欢迎大家指正赐教。

本文为100%原创,转载请务必标注原创作者,尊重劳动成果。

求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

相关推荐
her_heart7 小时前
ChatGPT 5.6 实战:用 AI 做云成本治理,从账单复盘到 K8s 优化
人工智能·云原生·chatgpt·kubernetes·测试用例
花和满楼8 小时前
K8s 1.36 ImageVolume GA:OCI 镜像不再只能跑容器
java·容器·kubernetes
bukeyiwanshui1 天前
20260626 k8sControllers介绍
云原生·容器·kubernetes
能有时光1 天前
] K8s 核心组件使用指南
云原生·容器·kubernetes
云烟成雨TD1 天前
Kubernetes 系列【13】控制器:可视化操作 Deployment
云原生·容器·kubernetes
运维老郭2 天前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
gs801402 天前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui2 天前
20260701 k8s Metric Server
容器·贪心算法·kubernetes