k8s证书更新
1. 查看证书过期时间
#通过文件查看证书过期时间
for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`;do openssl x509 -in $item -text -noout| grep Not;echo ======================$item===============;done
#通过命令查看证书过期时间
kubeadm certs check-expiration
k8s安装一年后证书显示过期。证书未自动续期。
以下操作需到所有master节点操作
一般情况下,k8s创建的集群节点上的/usr/bin/文件夹下会存在kubeadm二进制文件,如果发现master节点上没有kubeadm,可以从官方下载对应的版本并且安装。
2. 备份文件
## 将k8s和tecd相关文件做备份
cp -r /etc/kubernetes /etc/kubernetes.bak
cp -r /var/lib/etcd /var/lib/etcd.bak
3. 证书更新
kubeadm certs renew all #新版本更新证书
kubeadm alpha certs renew all #老版本更新证书
4. 更新kubeconfig
mv /etc/kubernetes/admin.conf /root/
cp -r /root/.kube /root/.kube.bak
cp -f /etc/kubernetes/admin.conf /root/.kube/config
kubeadm init phase kubeconfig all #更新kubeconfig
5. 验证
# 验证与组件重启,执行完上述更新证书操作后可以通过
echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate
#验证apiserver证书有效期是否更新,会发现证书有效期没有更新。此原因是k8s组件如果没有重启就不会使用新证书导致的,执行如下命令
docker rm -f $(docker ps -q -f label=io.kubernetes.container.name=kube-apiserver)
docker rm -f $(docker ps -q -f label=io.kubernetes.container.name=kube-controller-manager)
docker rm -f $(docker ps -q -f label=io.kubernetes.container.name=kube-scheduler)
docker rm -f $(docker ps -q -f label=io.kubernetes.container.name=etcd)
#以重启k8s及etcd相关组件后,再次执行可以观察到证书有效期已经发生变化
echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate
# 注意:必须重启一下kubelet docker
systemctl restart kubelet docker
#docker重启后容器都是未运行中,请通过此命令运行所有的容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#根据容器的状态,删除Exited状态的所有容器,不然K8S的组件(etcd,kube-apiserver,kube-controller-manager,kube-scheduler)重名运行不起来
docker rm $(sudo docker ps -qf status=exited)
#此时,还是无法使用kubectl get nodes,一定要重启机器
reboot
次博客是本人测试过v1.23.8版本后,没有问题后撰写的,请大家放心操作!
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 54d v1.23.8
k8s-node1 Ready <none> 54d v1.23.8
k8s-node2 Ready <none> 54d v1.23.8
[root@k8s-master ~]#