更新 kubernetes 过期证书
问题描述
在Kubernetes Cluster中,在集群初时化时创建的证书1年到期。到期之后,集群的各个组件之间将无法访问
环境概述
属性 | 信息 |
---|---|
系统环境 | CentOS Linux release 7.7.1908 (Core) |
软件版本 | Kubernetes v1.19.8 |
证书管理相关文档
官方文档 - 使用 kubeadm 进行证书管理 https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/ [官方文档 - kubeadm alpha 使用说明 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/
查看当前证书状态
[root@localhost ~]# kubeadm alpha certs check-expiration [check-expiration] Reading configuration from the cluster... [check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED admin.conf Feb 15, 2023 08:47 UTC 218d no apiserver Feb 15, 2023 08:47 UTC 218d ca no apiserver-etcd-client Feb 15, 2023 08:47 UTC 218d etcd-ca no apiserver-kubelet-client Feb 15, 2023 08:47 UTC 218d ca no controller-manager.conf Feb 15, 2023 08:47 UTC 218d no etcd-healthcheck-client Feb 15, 2023 08:45 UTC 218d etcd-ca no etcd-peer Feb 15, 2023 08:45 UTC 218d etcd-ca no etcd-server Feb 15, 2023 08:45 UTC 218d etcd-ca no front-proxy-client Feb 15, 2023 08:47 UTC 218d front-proxy-ca no scheduler.conf Feb 15, 2023 08:47 UTC 218d no CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED ca Jun 22, 2031 02:10 UTC 8y no etcd-ca Jun 22, 2031 02:10 UTC 8y no front-proxy-ca Jun 22, 2031 02:10 UTC 8y no
解决办法
通过延长证书期限即可解决问题…………无需重新生成证书。
第一步、备份配置文件(主机节点
cp -drv /etc/kubernetes /etc/kubernetes.backup
第二步、延长证书期限(主机节点)
单节点
可以直接运行 kubeadm alpha certs renew all --config kubeadm.yaml
完成证书更新。然后替换 kubelet 配置
多 master 节点证书更新
所有 master 节点依次完成如下命令
etcd 心跳证书: kubeadm alpha certs renew etcd-healthcheck-client --config kubeadm-config.yaml etcd peer 证书: kubeadm alpha certs renew etcd-peer --config kubeadm-config.yaml etcd server 证书: kubeadm alpha certs renew etcd-server --config kubeadm-config.yaml front-proxy-client 证书: kubeadm alpha certs renew front-proxy-client --config kubeadm-config.yaml apiserver-etcd-client 证书 kubeadm alpha certs renew apiserver-etcd-client --config kubeadm-config.yaml apiserver-kubelet-client 证书 kubeadm alpha certs renew apiserver-kubelet-client --config kubeadm-config.yaml apiserver 证书 kubeadm alpha certs renew apiserver --config kubeadm-config.yaml
不同的 master 节点使用的 kubeadm 配置有细微的差异,执行更新证书是,每个 master 在 --config
后面使用原来集群创建时,当前 master 对应的 kubeadm 配置文件。
第三步、更新配置文件(主机节点)
# 移除旧配置 rm -rf /etc/kubernetes/admin.conf rm -rf /etc/kubernetes/kubelet.conf rm -rf /etc/kubernetes/controller-manager.conf rm -rf /etc/kubernetes/scheduler.conf # 生成新配置(而实际上是更新客户端证书) kubeadm init phase kubeconfig all --config ${kubeadm.yaml配置文件}
第四步、重启服务(所有节点)
systemctl restart kubelet.service
systemctl restart docker
第五步、验证集群状态
清理前次的 kubectl 权限信息:rm -rf $HOME/.kube
。
重新配置 kubectl 权限信息:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 验证 etcd:查看 etcd 中某个节点的 docker 日志,日志中所有 etcd peer 均 active 且加入到同一个集群
- 验证 kubernetes 集群:运行
kubectl cluster-info
和kubectl get nodes
符合预期。 - 确性 kubernetes 系统相关的服务运行正常 (核心是
kube-apiserver
,kube-controller-manager
,kube-proxy
,kube-flannel
):kubectl get pods -n kube-system
- 检查 pod 的运行状态:
kubectl get pods --all-namespaces
可能的问题
Part of the existing bootstrap client certificate is expired: 2020-01-19 15:10:17 +0000 UTC
:确认全部证书更新,并且证书更新好后,更新了 kubernetes 配置- api server 日志:
Unable to authenticate the request due to an error: [x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid]
。可能原因有:证书过期;证书部分更新;master 上包含了代理配置,导致对 apiserver 的请求走了代理,证书认证通不过(运行unset http_proxy;unset ftp_proxy;unset socks_proxy;unset https_proxy
,取消代理配置)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!