kubeadm证书过期更新
2024-11-27 02:59:58 阅读次数:2
更新,证书
1. 使用说明
[root@k8s01 ~]# openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
Not Before: Jan 10 09:56:12 2022 GMT
Not After : Jan 8 09:56:12 2032 GMT
[root@k8s01 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
Not Before: Jan 10 09:56:12 2022 GMT
Not After : Jan 10 09:56:13 2023 GMT
#ca证书有效期10年,apiserver证书有效期1年
kubeadm 生成的证书有效期为 1 年,该脚本可将 kubeadm 生成的证书有效期更新为 10 年
该脚本只处理 master 节点上的证书,node 节点的 kubelet 证书默认自动轮换更新,无需关心过期问题,只需关心 master 节点上的证书即可
该脚本仅需要在 master 节点执行,无需在 node 节点执行
若没有 etcd 相关证书,只需要更新 master 证书即可,见这里(小于等于 v1.9 版本,etcd 默认不使用 TLS 连接)
默认情况按照下面步骤进行证书更新
执行时请使用 ./update-kubeadm-cert.sh all 或者 bash update-kubeadm-cert.sh all ,不要使用 sh update-kubeadm-cert.sh all,因为某些 Linux 发行版 sh 并不是链接到 bash,可能会不兼容
如果有多个 master 节点,在每个 master 节点都执行一次
执行命令:
git clone
cd update-kubeadm-cert
chmod 755 update-kubeadm-cert.sh
chmod 755 update-kubeadm-cert.sh
./update-kubeadm-cert.sh all
输出类似信息
[2022-01-10T18:50:09.365346270+0800]: INFO: backup /etc/kubernetes to /etc/kubernetes.old-20220110
Signature ok
subject=/CN=etcd-server
Getting CA Private Key
[2022-01-10T18:50:09.425352868+0800]: INFO: generated /etc/kubernetes/pki/etcd/server.crt
Signature ok
subject=/CN=etcd-peer
Getting CA Private Key
[2022-01-10T18:50:09.481460118+0800]: INFO: generated /etc/kubernetes/pki/etcd/peer.crt
Signature ok
subject=/O=system:masters/CN=kube-etcd-healthcheck-client
Getting CA Private Key
[2022-01-10T18:50:09.522898903+0800]: INFO: generated /etc/kubernetes/pki/etcd/healthcheck-client.crt
Signature ok
subject=/O=system:masters/CN=kube-apiserver-etcd-client
Getting CA Private Key
[2022-01-10T18:50:09.559751660+0800]: INFO: generated /etc/kubernetes/pki/apiserver-etcd-client.crt
1c65dac2967f
[2022-01-10T18:50:11.067593654+0800]: INFO: restarted etcd
Signature ok
subject=/CN=kube-apiserver
Getting CA Private Key
[2022-01-10T18:50:11.136289676+0800]: INFO: generated /etc/kubernetes/pki/apiserver.crt
Signature ok
subject=/O=system:masters/CN=kube-apiserver-kubelet-client
Getting CA Private Key
[2022-01-10T18:50:11.177126464+0800]: INFO: generated /etc/kubernetes/pki/apiserver-kubelet-client.crt
Signature ok
subject=/CN=system:kube-controller-manager
Getting CA Private Key
[2022-01-10T18:50:11.269766849+0800]: INFO: generated /etc/kubernetes/controller-manager.crt
[2022-01-10T18:50:11.302255202+0800]: INFO: generated new /etc/kubernetes/controller-manager.conf
Signature ok
subject=/CN=system:kube-scheduler
Getting CA Private Key
[2022-01-10T18:50:11.379987827+0800]: INFO: generated /etc/kubernetes/scheduler.crt
[2022-01-10T18:50:11.388350335+0800]: INFO: generated new /etc/kubernetes/scheduler.conf
Signature ok
subject=/O=system:masters/CN=kubernetes-admin
Getting CA Private Key
[2022-01-10T18:50:11.454095179+0800]: INFO: generated /etc/kubernetes/admin.crt
[2022-01-10T18:50:11.460446442+0800]: INFO: generated new /etc/kubernetes/admin.conf
[2022-01-10T18:50:11.467249673+0800]: INFO: copy the admin.conf to ~/.kube/config for kubectl
[2022-01-10T18:50:11.470375526+0800]: WARNING: does not need to update kubelet.conf
Signature ok
subject=/CN=front-proxy-client
Getting CA Private Key
[2022-01-10T18:50:11.502384189+0800]: INFO: generated /etc/kubernetes/pki/front-proxy-client.crt
730fa1430c87
[2022-01-10T18:50:12.428407360+0800]: INFO: restarted kube-apiserver
4b97debc1405
[2022-01-10T18:50:12.828963546+0800]: INFO: restarted kube-controller-manager
8cbc7dd868e2
[2022-01-10T18:50:13.409071339+0800]: INFO: restarted kube-scheduler
[2022-01-10T18:50:13.625536997+0800]: INFO: restarted kubelet
2. 证书更新失败回滚
脚本会自动备份 /etc/kubernetes 目录到 /etc/kubernetes.old-$(date +%Y%m%d) 目录(备份目录命名示例:kubernetes.old-20200325)
若更新证书失败需要回滚,手动将备份 /etc/kubernetes.old-$(date +%Y%m%d)目录覆盖 /etc/kubernetes 目录
3. 其他
以下内容与该脚本无关,只是啰嗦几句
大于等于 v1.15 的版本可直接使用 kubeadm alpha certs renew <cert_name> 来更新证书有效期,更新后证书有效期延长 1 年
若小于小于 v1.17 版本实用 kubeadm alpha certs renew <cert_name> 来更新证书,需要手动处理一下,这是一个 bug
若使用该脚本更新证书,无需再手动处理,可忽略该 bug
kubeadm alpha certs renew <cert_name>
4、kubeadm 证书相关命令发展
v1.8 版开始提供了证书生成命令 kubeadm alpha phase certs <cert_name>
v1.13 版开始证书生成命令改为 kubeadm init phase certs <cert_name>
v1.15 版增加了证书更新命令 kubeadm alpha certs renew <cert_name>(这个命令与上面两个区别是:上面两个是生成证书,这个是更新证书),v1.15 版之后可使用 kubeadm alpha certs renew <cert_name> 来更新证书
5、kubeadm 命令更新证书手动处理
使用该脚本更新证书,不涉及下面这个 bug,无需手动处理
bug 见 https:///kubernetes/kubeadm/issues/1753 ,这个bug 在 1.17 版修复
针对小于 1.17版本 ,使用 kubeadm alpha certs renew <cert_name> 来更新证书
kubeadm alpha certs renew 并不会更新 kubelet 证书(kubelet.conf 文件里面写的客户端证书),因为 kubelet 证书是默认开启自动轮回更新的,但是在执行 kubeadm init 的 master 节点的 kubelet.conf 文件里面的证书是以 base64 编码写死的 (类似 controller-manager.conf 里面的证书)
在用 kubeadm 命令更新 master 证书时需要手动将 kubelet.conf 文件的 client-certificate-data 和 client-key-data 改为:
client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
6、检查
[root@k8s01 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
Not Before: Jan 10 10:50:11 2022 GMT
Not After : Jan 8 10:50:11 2032 GMT
[root@k8s01 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver-etcd-client.crt -noout -text |grep Not
Not Before: Jan 10 10:50:09 2022 GMT
Not After : Jan 8 10:50:09 2032 GMT
[root@k8s01 ~]# openssl x509 -in /etc/kubernetes/pki/front-proxy-ca.crt -noout -text |grep Not
Not Before: Jan 10 09:56:13 2022 GMT
Not After : Jan 8 09:56:13 2032 GMT
版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_13236892/5551266,作者:哭泣的馒头,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。
上一篇:LINUX随笔二十一 添加动态库路径的方法
下一篇:Nginx Location