赞
踩
目录
随着云计算技术的飞速发展,Kubernetes已成为企业构建、扩展和管理容器化应用程序的首选平台。然而,随着集群的持续运行,在企业中经常会遇到一个问题——Kubernetes集群的证书过期。这个问题不仅影响集群的稳定性,还可能带来安全风险。本文将深入探讨Kubernetes证书过期的问题、影响以及解决方案
Kubernetes集群中的各个组件(如API服务器、节点、控制器管理器等)之间使用证书进行身份验证和安全传输数据。然而,由于证书具有有效期限,一旦证书过期,集群中的组件将无法正常通信,导致应用程序无法正常运行。
具体来说,当Kubernetes集群证书过期时,可能出现以下情况:
1.kubectl命令无法连接到集群,报错“Unable to connect to the server: x509: certificate has expired or is not yet valid”。
2.集群中的Pod可能无法启动或运行异常,因为Kubelet组件无法与API服务器进行通信。
3.集群的监控和日志收集等功能可能受到影响,因为相关组件无法正常工作。
使用:kubeadm certs check-expiration命令查询,这种方式仅限于使用kubeadm安装的k8s集群,如果使用二进制安装的,需要使用创建证书的工具去查询
- [root@master01 ~]#kubeadm 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 -o yaml'
-
- CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
- admin.conf May 16, 2025 07:16 UTC 330d no
- apiserver May 16, 2025 07:16 UTC 330d ca no
- apiserver-etcd-client May 16, 2025 07:16 UTC 330d etcd-ca no
- apiserver-kubelet-client May 16, 2025 07:16 UTC 330d ca no
- controller-manager.conf May 16, 2025 07:16 UTC 330d no
- etcd-healthcheck-client May 16, 2025 07:16 UTC 330d etcd-ca no
- etcd-peer May 16, 2025 07:16 UTC 330d etcd-ca no
- etcd-server May 16, 2025 07:16 UTC 330d etcd-ca no
- front-proxy-client May 16, 2025 07:16 UTC 330d front-proxy-ca no
- scheduler.conf May 16, 2025 07:16 UTC 330d no
-
- CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
- ca May 14, 2034 07:16 UTC 9y no
- etcd-ca May 14, 2034 07:16 UTC 9y no
- front-proxy-ca May 14, 2034 07:16 UTC 9y no

标题含义
CERTIFICATE:这是指具体的证书名称
EXPIRES:这表示证书的到期日期和时间
RESIDUAL TIME:这是证书剩余的有效期。例如,330d表示还有 330 天到期
CERTIFICATE AUTHORITY:签发该证书的证书颁发机构(CA)的名称。例如,apiserver 证书的签发者是 ca
EXTERNALLY MANAGED:这表示证书是否由外部管理。如果标记为 no,则表明 kubeadm 管理这些证书。如果标记为 yes,则表明证书可能由其他工具或方法管理
证书作用
admin.conf
作用:用于管理员与Kubernetes API服务器进行交互的身份验证。这个配置文件包含了访问API服务器所需的证书和密钥。
apiserver
作用:安全通信:API服务器使用此证书与其他集群组件(如kubelet、控制器管理器等)进行TLS加密通信。
身份验证:确保只有授权的客户端可以访问API服务器。
apiserver-etcd-client
作用:API服务器用于与etcd集群通信的客户端证书,确保API服务器与etcd之间的通信是加密和安全的。
apiserver-kubelet-client
作用:API服务器用于与kubelet通信的客户端证书,确保API服务器可以安全地与集群中的节点进行通信。
controller-manager.conf
作用:控制器管理器用于与API服务器交互的身份验证证书,确保控制器管理器可以访问和操作集群资源。
etcd-healthcheck-client
作用:用于etcd健康检查的客户端证书,确保可以安全地检查etcd集群的健康状态。
etcd-peer
作用:etcd集群中节点之间通信的证书,确保etcd集群内部的通信是加密和安全的。
etcd-server
作用:etcd服务器用于与客户端通信的证书,确保etcd服务器可以安全地与集群中的其他组件进行通信。
front-proxy-client
作用:前端代理客户端证书,用于与API服务器进行身份验证,通常与某些代理或负载均衡器相关。
scheduler.conf
作用:调度器用于与API服务器交互的身份验证证书,确保调度器可以访问和操作集群资源。
根证书
ca(Certificate Authority)
作用:根证书颁发机构,用于签发和验证集群中其他所有证书的有效性。这是整个证书信任链的起点。
etcd-ca
作用:etcd集群的根证书颁发机构,专门用于签发和验证etcd相关的证书。
front-proxy-ca
作用:前端代理的根证书颁发机构,用于签发和验证与前端代理相关的证书。
数据对运维人员来说是非常重要的东西,为防止证书更新失败,需要将之前的证书进行备份,万一证书更新失败后,K8S集群还能再有效期内正常运行,而后重新更新证书
需要进行备份的文件有两个
- [root@master01 ~]#ll /etc/kubernetes/pki/
- 总用量 68
- -rw-r--r-- 1 root root 1265 5月 16 15:16 apiserver.crt
- -rw-r--r-- 1 root root 1135 5月 16 15:16 apiserver-etcd-client.crt
- -rw------- 1 root root 1675 5月 16 15:16 apiserver-etcd-client.key
- -rw------- 1 root root 1675 5月 16 15:16 apiserver.key
- -rw-r--r-- 1 root root 1143 5月 16 15:16 apiserver-kubelet-client.crt
- -rw------- 1 root root 1675 5月 16 15:16 apiserver-kubelet-client.key
- -rw-r--r-- 1 root root 1066 5月 16 15:16 ca.crt
- -rw------- 1 root root 1675 5月 16 15:16 ca.key
- drwxr-xr-x 2 root root 162 5月 16 15:16 etcd
- -rw-r--r-- 1 root root 1078 5月 16 15:16 front-proxy-ca.crt
- -rw------- 1 root root 1675 5月 16 15:16 front-proxy-ca.key
- -rw-r--r-- 1 root root 1103 5月 16 15:16 front-proxy-client.crt
- -rw------- 1 root root 1679 5月 16 15:16 front-proxy-client.key
- -rw------- 1 root root 1679 5月 16 15:16 sa.key
- -rw------- 1 root root 451 5月 16 15:16 sa.pub
- [root@master01 ~]#ll /var/lib/etcd/
- 总用量 0
- drwx------ 4 root root 29 6月 13 14:44 member
- '------------------------------------------------------------------------------------'
- /etc/kubernetes/pki/:此目录存放的是旧的证书文件
- /var/lib/etcd/:存放etcd数据,整个集群的业务以及组件通信都在其中

备份数据
- [root@master01 ~]#mkdir -p /k8s/bak/
- #备份证书
- [root@master01 ~]#cp -ar /etc/kubernetes/pki/ /k8s/bak/
- #备份数据库
- [root@master01 ~]#cp -ar /var/lib/etcd/ /k8s/bak/
- [root@master01 ~]#ll /k8s/bak/
- 总用量 4
- drwx------ 3 root root 20 6月 13 14:44 etcd
- drwxr-xr-x 3 root root 4096 6月 6 08:51 pki
根证书默认都是十年,所以需要升级客户端证书
使用:kubeadm certs renew all命令。升级所有证书
也可以升级单独的证书,例如:kubeadm certs renew apiserver 仅重新生成 API 服务器的证书
- [root@master01 ~]#kubeadm certs renew all
- [renew] Reading configuration from the cluster...
- [renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
-
- certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
- certificate for serving the Kubernetes API renewed
- certificate the apiserver uses to access etcd renewed
- certificate for the API server to connect to kubelet renewed
- certificate embedded in the kubeconfig file for the controller manager to use renewed
- certificate for liveness probes to healthcheck etcd renewed
- certificate for etcd nodes to communicate with each other renewed
- certificate for serving etcd renewed
- certificate for the front proxy client renewed
- certificate embedded in the kubeconfig file for the scheduler manager to use renewed
-
- Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.

升级后查看证书有效期时限
更新完证书之后,相关pod还是以之前的证书为凭证,所以需要重启相关组件,使新的证书生效
在更新证书时,同样会有提示信息
直接删除之前的组件pod,它们不是由pod控制器管理,而是由集群管理工具集群管理工具kubeadm直接重新拉取
kubectl delete pods -n kube-system kube-apiserver-master01 kube-controller-manager-master01 kube-scheduler-master01 etcd-master01
- [root@master01 ~]#kubectl delete pods -n kube-system kube-apiserver-master01 kube-controller-manager-master01 kube-scheduler-master01 etcd-master01
- pod "kube-apiserver-master01" deleted
- pod "kube-controller-manager-master01" deleted
- pod "kube-scheduler-master01" deleted
- pod "etcd-master01" deleted
- [root@master01 ~]#kubectl get pod -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-74ff55c5b-dwzdp 1/1 Running 10 34d
- coredns-74ff55c5b-ws8c8 1/1 Running 10 34d
- etcd-master01 1/1 Running 10 9s
- kube-apiserver-master01 1/1 Running 5 9s
- kube-controller-manager-master01 1/1 Running 45 9s
- kube-proxy-58zbl 1/1 Running 0 3d6h
- kube-proxy-9v7jw 1/1 Running 0 3d6h
- kube-proxy-xdgb4 1/1 Running 0 3d6h
- kube-scheduler-master01 1/1 Running 48 9s

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。