云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > kubeadm更新kubernetes证书

kubeadm更新kubernetes证书实现方式

作者:alden_ygq

Kubernetes证书管理在Kubernetes集群中,证书的到期问题是运维人员需要关注的重要问题,证书过期会导致kubelet报错,影响集群的正常访问,为了避免证书过期,需要提前进行续期操作,本文将介绍基于kubeadm安装的Kubernetes集群证书续期操作的详细步骤

现象

在 Kubernetes 的运维工作中,k8s证书需要实时监控,避免因过期导致kubelet 报错,集群无法访问,比如像这样:

kubelet 报 x509: certificate has expired or is not yet valid

那么当出现证书过期的时候,应该如何续期呢,下面就基于 kubeadm 安装的 kubernetes 集群做续期操作。

查看证书有效期

ssh 登录k8s集群随机master 节点执行,查看输出,只要 RESIDUAL TIME < 30 天,就建议提前续期,防止遗忘导致过期。

kubeadm certs check-expiration

输出示例:

CERTIFICATE                EXPIRES   RESIDUAL TIME

apiserver                  2025-09-10   7d
apiserver-etcd-client      2025-09-10   7d
front-proxy-client         2025-09-10   7d
...

更新证书流程

备份当前配置

# 备份 Kubernetes 配置目录
cp -r /etc/kubernetes /etc/kubernetes-$(date +%Y%m%d).bak
# 如有必要,备份 etcd 数据目录
cp -r /data/etcd /data/etcd-$(date +%Y%m%d).bak
# 备份 kubeconfig 文件
cp ~/.kube/config ~/.kube/config.bak.$(date +%F)

说明:

注意:备份操作需要在所有 master 节点上都需要执行

更新 Master 节点证书

Master 节点上的证书更新是操作的核心,请在所有 Master 节点上执行以下操作

更新所有证书

sudo kubeadm certs renew all

此命令会更新 /etc/kubernetes/pki/ 目录下的所有证书,并生成新的 admin.confcontroller-manager.confscheduler.conf 等文件。

更新 kubeconfig 文件

将新生成的 admin.conf 复制到你的用户目录并设置正确的权限

sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config

注意:对于高可用 (HA) 集群,在完成一个 Master 节点的证书更新后,需要将更新的证书文件(通常在 /etc/kubernetes/pki/ 目录下,但注意不要覆盖仍有效的 CA 密钥)手动同步到其他 Master 节点,并在每个节点上重复更新 kubeconfig 和重启组件的步骤。

重启控制平面组件

证书更新后,需要重启相关的控制平面组件以加载新证书。由于这些组件通常是以静态 Pod 方式运行,重启节点上的 kubelet 服务即可

sudo systemctl restart kubelet

kubelet 会重建所有控制平面的静态 Pod(apiserver, controller-manager, scheduler, etcd)。

验证 Master 证书

运行命令检查证书有效期,确认已更新:

kubeadm certs check-expiration
kubectl get nodes # 测试 kubectl 是否正常工作

处理 Node 节点证书

Node 节点(工作节点)的 kubelet 证书通常启用了自动轮换机制(Kubernetes v1.12+ 默认开启)。主要需要确保该功能正常。

检查 kubelet 自动轮换

在每个 Node 节点上,检查 kubelet 配置:

cat /var/lib/kubelet/config.yaml | grep rotateCertificates
# 或者查看进程参数
ps aux | grep kubelet | grep rotate

输出中应包含 rotateCertificates: true 或 --rotate-certificates 参数。

批准 CSR(如有必要)

如果某个 Node 节点的证书即将过期或已过期且未自动更新,用户可以在 Master 节点上批准其证书签名请求(CSR):

# 查看所有 CSR
kubectl get csr
# 批准所有 Pending 状态的 CSR
kubectl get csr -o name | xargs kubectl certificate approve

批准后,kubelet 会自动下载新证书。

强制重建证书(仅在自动轮换失效时)

如果证书已过期且自动轮换失效,可在问题 Node 节点上执行:

sudo systemctl stop kubelet
sudo rm -rf /var/lib/kubelet/pki/*
sudo systemctl start kubelet

之后在 Master 节点上批准该节点新生成的 CSR。

更新后验证

完成所有操作后,进行整体验证:

# 检查所有节点状态是否为 Ready
kubectl get nodes
# 检查 kube-system 命名空间下的所有 Pod 是否运行正常
kubectl get pods -n kube-system
# 可以创建一个测试 Pod 并执行命令
kubectl run test-pod --image=nginx --restart=Never --rm -it -- nginx -v

长期维护建议

重要提醒

证书更新是关键的集群维护操作。务必提前备份,并在测试环境中熟练流程后再在生产环境操作。对于 HA 集群,注意证书的同步问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文