更新 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-proxykube-flannel):kubectl get pods -n kube-system
  • 检查 pod 的运行状态:kubectl get pods --all-namespaces

可能的问题

  1. Part of the existing bootstrap client certificate is expired: 2020-01-19 15:10:17 +0000 UTC:确认全部证书更新,并且证书更新好后,更新了 kubernetes 配置
  2. 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,取消代理配置)。

 

posted @ 2022-06-14 10:19  流年晕开时光  阅读(637)  评论(0编辑  收藏  举报