使用kubeadm方式安装的kubernetes集群各个组件所使用的证书期限为1年,CA 根证书是 10 年。到期后,证书失效,kubectl命令无法使用,在使用kubectl命令时,报错无法连接到localhost:8080,错误大概为:“certificate has expired or is not yet valid”。

来自弟弟的忠告,尽量别过期,在有效期内更新,这样会省去很多不必要的麻烦!!! 

1.在master上查看各证书的过期时间(没过期的情况下,只需在主master上进行备份更新,会自动同步。如果已过期,则需主master备份,更新后手动复制/etc/kubernetes到其他master。)

可以通过下面两种方式是检查证书是否过期。

1. 使用adm命令
 kubeadm certs check-expiration

               kubeadm 提供了自动更新的证书的命令,在证书还未过期,集群正常运行的情况下可以使用此命令,1.19之前的版本检查证书的功能还没正式发布,所以还在alpha的子命令里,使用 kubeadm alpha certs check-expiration。1.19版本及以后,则可去掉alpha,使用kubeadm certs check-expiration。

2. 使用openssl命令
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

2.证书备份

cp -rp /etc/kubernetes /etc/kubernetes.bak

3.删除旧的证书

sudo rm -rf /etc/kubernetes/pki/apiserver.key

4.重新生成证书

kubeadm alpha certs renew                                                                                         
Usage:
  kubeadm alpha certs renew [flags]
  kubeadm alpha certs renew [command]

Available Commands:
  all                      renew all available certificates
  apiserver                Generates the certificate for serving the Kubernetes API
  apiserver-etcd-client    Generates the client apiserver uses to access etcd
  apiserver-kubelet-client Generates the Client certificate for the API server to connect to kubelet
  etcd-healthcheck-client  Generates the client certificate for liveness probes to healtcheck etcd
  etcd-peer                Generates the credentials for etcd nodes to communicate with each other
  etcd-server              Generates the certificate for serving etcd
  front-proxy-client       Generates the client for the front proxy
kubeadm  certs renew all
  • renew:Renew certificates for a Kubernetes cluster(更新 Kubernetes 集群的证书,注:不涉及 CA 根证书)。

        更新完证书要重启一下apiserver、controller-manager 、 scheduler 和 etcd组件,重启方式其实就是到kubernetes 的静态pod目录下,将这几个yaml文件移出,然后过两分钟之后,在移入即可。

        此时所有证书都已重新生成,/etc/kubernetes下的admin.conf、controller-manager.conf、scheduler.conf 也已经更新了. 如果你运行了一个 HA 集群,这个命令需要在所有控制面板节点上执行,没有更新的文件就只有 /etc/kubernetes/kubelet.conf 了,因为 kubeadm 将 kubelet 配置为 自动更新证书。 轮换的证书位于目录 /var/lib/kubelet/pki,一般由bootstrap滚动更新。但是会存在关闭rotation证书轮换后,不能自动更新的情况,需要手动更新。

5.重新生成配置文件

        避免存在上述没有自动更新或者证书已过期进行证书续期的情况,我们统一做一步生成配置文件的操作

kubeadm init phase kubeconfig -h                                                                       
Usage:
  kubeadm init phase kubeconfig [flags]
  kubeadm init phase kubeconfig [command]

Available Commands:
  admin              Generates a kubeconfig file for the admin to use and for kubeadm itself
  all                Generates all kubeconfig files
  controller-manager Generates a kubeconfig file for the controller manager to use
  kubelet            Generates a kubeconfig file for the kubelet to use *only* for cluster bootstrapping purposes
  scheduler          Generates a kubeconfig file for the scheduler to use

        可以通过调用 all 子命令来创建所有必需的 kubeconfig 文件,或者分别调用它们。 需要先把 /etc/kubernetes/kubelet.conf 删掉,使用 kubeadm init phase kubeconfig kubelet 进行重新生成。之后在 systemctl restart kubelet 进行重启。

kubeadm init phase kubeconfig all

6.检查证书时间

# 再次检查一下证书有效期 ,可以看到有效期又更新成一年了
kubeadm certs check-expiration

7.后续操作

完成证书和配置文件的更新后,需要进行一系列后续操作保证更新生效,主要包括重启 kubelet、更新管理配置。

7.1 重启kubelet
systemctl restart kubelet
7.2 更新admin配置

将新生成的 admin.conf 文件拷贝,替换 ~/.kube 目录下的 config 文件

cp /etc/kubernetes/admin.conf ~/.kube/config

        使用kubeadm 更新证书的前提是,集群的证书还未失效,集群在正常运行中,如果说等我们发现证书过期集群已经宕机了,这时候kubelet已经和master节点失联了,通过kubeadm是无法更新kubelet的证书,所有就需要手动生成证书,并替换上去。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐