在默认情况下,Kubernetes 的证书每隔一年需要 renew 一次,下面是记录的一次证书更新过程。
1. 查看证书
在 Master 节点上查看证书过期时间:
1
| kubeadm certs check-expiration
|
低版本的集群下,执行命令会报错,可以执行命令: kubeadm alpha certs check-expiration
2. 备份相关文件
这里可以直接备份整个 Kubernetes 配置文件
1
| cp -r /etc/kubernetes /etc/kubernetes.old
|
3. 在每个 Master 节点上执行命令更新证书
1
| kubeadm certs renew all
|
低版本的集群下,执行命令会报错,可以执行命令: kubeadm alpha certs renew all
4. 更新 ~/.kube/config 文件
1
2
3
4
5
6
| cat > kubeadm.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock
EOF
|
1
| kubeadm init phase kubeconfig all --config kubeadm.yaml
|
1
| kubeadm init phase kubeconfig all
|
1
2
| cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
|
1
2
3
4
| KUBECONFIG=~/.kube/config \
kubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' \
| base64 -d \
| openssl x509 -noout -dates
|
5. 重启相关服务
1
| systemctl restart kubelet
|
1
| nerdctl -n k8s.io ps | egrep "kube-apiserver|kube-scheduler|kube-controller-manager|etcd" | awk '{print $1}' | xargs -r -n1 -P0 nerdctl -n k8s.io restart || true
|
1
| nerdctl -n k8s.io ps | egrep "kube-apiserver|kube-scheduler|kube-controller-manager|etcd"
|
6. 查看配置文件中的证书有效期
1
2
3
4
5
6
7
8
9
10
| for f in /etc/kubernetes/*.conf; do
echo "=== $f ==="
cert=$(grep 'client-certificate-data:' "$f" | awk '{print $2}')
if [ -n "$cert" ]; then
echo "$cert" | base64 --decode | openssl x509 -noout -dates
else
echo "No client certificate found"
fi
echo
done
|