更新k8s证书

作者:Administrator 发布时间: 2024-11-19 阅读量:9 评论数:0

在 Kubernetes 1.24 中,默认的证书有效期是一年。如果证书过期,会导致集群的 Master 和 Node 组件无法正常通信。要解决这个问题,可以按照以下步骤进行证书更新和服务重启:

步骤 1:检查证书状态

运行以下命令检查证书是否已过期:

kubeadm certs check-expiration

这将显示所有证书的到期时间。如果发现证书过期,则需要进行更新。

步骤 2:备份数据

在进行任何更改前,请备份你的集群配置和重要数据:

# 备份 etcd 数据(如果运行在本地)

ETCDCTL_API=3 etcdctl snapshot save snapshot.db \

  --endpoints=https://127.0.0.1:2379 \

  --cacert=/etc/kubernetes/pki/etcd/ca.crt \

  --cert=/etc/kubernetes/pki/etcd/server.crt \

  --key=/etc/kubernetes/pki/etcd/server.key

# 备份 Kubernetes 配置文件

cp -r /etc/kubernetes /backup-path

cp -r ~/.kube /backup-path

步骤 3:更新过期证书

使用 kubeadm 工具更新证书:

kubeadm certs renew all

如果只需要更新特定证书,可以用以下命令替换 all

apiserver

apiserver-kubelet-client

controller-manager

scheduler

front-proxy-client

etcd-ca (如果 etcd 使用了自签名证书)

更新完成后,再次运行以下命令验证:

kubeadm certs check-expiration

步骤 4:分发新证书到节点

将更新的证书分发到所有的 Worker 节点:

scp -r /etc/kubernetes/pki <node-user>@<node-ip>:/etc/kubernetes/

scp /etc/kubernetes/admin.conf <node-user>@<node-ip>:/etc/kubernetes/

确保节点有正确的权限:

chmod 600 /etc/kubernetes/pki/*

chmod 600 /etc/kubernetes/admin.conf

步骤 5:重启 Master 和 Node 服务

重启 Master 节点:

systemctl restart kubelet

重启所有 Node 节点:

在每个节点上运行以下命令:

systemctl restart kubelet

步骤 6:验证集群状态

运行以下命令确保集群恢复正常:

kubectl get nodes

kubectl get pods -n kube-system

注意事项

1. 如果 kubeadm 无法运行(因证书过期),可以尝试临时跳过证书验证,启动 API Server:

修改 /etc/kubernetes/manifests/kube-apiserver.yaml,添加参数:

- --kubelet-certificate-authority=/dev/null

- --kubelet-client-key=/dev/null

保存文件后,Kubernetes 会自动重新加载配置文件。

2. 更新完证书后,记得移除临时参数。

3. 为了避免类似问题,可以修改证书默认有效期:

在初始化时,添加 --certificate-renewal-period 参数。

或者定期设置 kubeadm certs renew 的计划任务。

如果遇到其他问题,随时告知!

评论