提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会
文章目录
前言
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%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~