全网最全,K8S证书过期后如何延长CA及组件证书至100年
时间:2025-2-19 11:40 作者:Anglei 分类: 虚拟化
在 Kubernetes 中,证书过期可能会导致 API 服务器、kubectl 和其他组件无法正常工作。更新过期的证书通常涉及以下几个步骤:
查看证书状态
然后使用 OpenSSL 命令检查特定证书:
kubeadm certs check-expiration
或者
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver-etcd-client.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver-kubelet-client.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/front-proxy-ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/front-proxy-client.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/etcd/ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/etcd/healthcheck-client.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/etcd/peer.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -noout -text |grep Not
延长证书到100年
要延长Kubernetes集群的CA证书有效期至100年,需手动生成新CA并重新签发所有组件证书。以下是详细步骤:
步骤1:备份现有证书
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.backup
步骤2:生成新的CA证书(有效期为100年)
openssl req -x509 -new -nodes -newkey rsa:2048 -keyout /etc/kubernetes/pki/ca.key -out /etc/kubernetes/pki/ca.crt -subj "/CN=kubernetes-ca" -days 36500
步骤3:重新生成所有组件证书
使用新CA重新签发API Server、etcd等证书:
示例:重新生成API Server证书
openssl genrsa -out /etc/kubernetes/pki/apiserver.key 2048
openssl req -new -key /etc/kubernetes/pki/apiserver.key -out /etc/kubernetes/pki/apiserver.csr -subj "/CN=kube-apiserver"
openssl x509 -req -in /etc/kubernetes/pki/apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/apiserver.crt -days 36500
重复此过程为其他组件生成证书(如etcd、front-proxy等)。
步骤4:更新kubeconfig文件
更新管理员kubeconfig以使用新CA:
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=https://<API-SERVER-IP>:6443
步骤5:重启控制平面组件
重启API Server、Controller Manager、Scheduler等组件:
# 对于kube-apiserver(若以静态Pod运行)
mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/
sleep 20
mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/
重复此步骤重启其他组件。
步骤6:更新节点证书
在每个节点上更新kubelet证书:
systemctl restart kubelet
步骤7:验证
检查证书有效期及集群状态:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -dates
crictl ps
kubectl get nodes
以上这么繁杂的步骤,为什么不在创建K8S时候就把日期写成100年呢?
PS:
在 Kubernetes 中,验证 super-admin.conf 证书文件是否启用自动续期,需检查 kubelet 的配置参数。执行以下命令查看 kubelet 配置:
cat /var/lib/kubelet/config.yaml | grep -E 'serverTLSBootstrap|rotateCertificates'
若输出包含以下两项且值为 true,则说明启用了自动签发:
serverTLSBootstrap: true
rotateCertificates: true
若未启用,需手动添加并重启 kubelet 服务:
systemctl restart kubelet
super-admin.conf 文件引用的客户端证书是否自动续期,取决于 kubelet 的证书轮换配置。自动续期通常由 kubelet 自身管理,而非通过 kubeadm 直接控制。
100年的组件证书更新shell脚本如下:

微信扫描二维码或搜索【智慧科技新视角】关注,聊天窗口发送【验证码】三个字获取(免费)
注意事项
- 安全风险:长期有效的CA证书增加安全风险,建议定期轮换。
- 兼容性:确保所有组件支持新证书,避免版本不兼容问题。
- 彻底测试:在生产环境操作前,在测试环境中验证流程。
完成以上步骤后,CA证书及组件证书将被更新为100年有效期。务必谨慎操作,确保备份并验证各步骤正确性。

推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(3) |
![]() 鲜花(1) |
![]() 鸡蛋(0) |