K8S(kubeadm版)更新证书
k8s证书过期更换,kubeadm方式更换证书
使用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的证书,所有就需要手动生成证书,并替换上去。
更多推荐
所有评论(0)