Please enable Javascript to view the contents

如何更新 Kubernetes 证书

 ·  ☕ 1 分钟

在默认情况下,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 文件

  • Docker
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
  • Containerd
1
kubeadm init phase kubeconfig all
  • 更新全部使用方 kubeconfig 文件
1
2
cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
  • 查看 kubeconfig 文件中的证书有效期
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. 重启相关服务

  • 重启 kubelet
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

微信公众号
作者
微信公众号