本文仅适用于使用 kubeadm 搭建的集群,本文假设您的 CA 并未过期
1. 备份
该操作可于任一控制平面进行
再进行任何修改之前,先备份现有证书目录
# 创建一个带有时间戳的备份目录(将 /etc/kubernetes/pki 替换为k8s集群的证书目录)
sudo cp -rp /etc/kubernetes/pki /etc/kubernetes/pki.backup-$(date +%F-%T)-expired
2. 更新证书
该操作可于任一控制平面进行
# kubeadm会使用未过期的CA来重新签发所有其他证书
sudo kubeadm certs renew all
kubeadm 会输出他续签的每一个证书文件
3. 重启控制平面组件
该操作需于所有控制平面进行
- 移走Manifests文件,触发Pod停止
# 该命令理论上会有 6 条输出,分别是下面说的三个 pod 以及各自的 Pause 容器
docker ps | grep -E 'kube-apiserver|kube-controller-manager|kube-scheduler'
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/
sudo mv /etc/kubernetes/manifests/kube-controller-manager.yaml /tmp/
sudo mv /etc/kubernetes/manifests/kube-scheduler.yaml /tmp/
- 确认相关 pod 已停止
# 等待 20 秒左右 直到确认该命令没有输出
docker ps | grep -E 'kube-apiserver|kube-controller-manager|kube-scheduler'
- 移回Manifests文件,触发Pod使用新证书启动
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/
sudo mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/
sudo mv /tmp/kube-scheduler.yaml /etc/kubernetes/manifests/
# 确认该命令有 6 条输出
docker ps | grep -E 'kube-apiserver|kube-controller-manager|kube-scheduler'
4. 更新 kubeconfig
步骤 1 2 仅需在一个控制平面上进行
步骤 3 需要在所有需要使用 kubectl 的机器上应用
- 备份当前的kubeconfig文件
# 备份系统级别的admin.conf
sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.bak
# 备份当前 home 目录下的config
mv $HOME/.kube/config $HOME/.kube/config.bak-expired
- 生成一个新的 admin.conf
sudo kubeadm init phase kubeconfig admin
- 应用新的 kubeconfig
# 该命令仅适用于同一机器,不同机器分发需要其他方式
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 赋予当前用户权限
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. 验证
推荐在所有控制平面节点上重复验证以确保一致性
# 验证kubectl连通性 该命令应该不报错
kubectl get nodes
# 验证集群组件状态 所有系统组件应为 Running 状态
kubectl get pods -n kube-system
# 验证证书有效期 所有证书的剩余时间应被更新
sudo kubeadm certs check-expiration
K8S集群证书续签全流程指南
326

被折叠的 条评论
为什么被折叠?



