通过kubeadm 部署的集群通过kubeadm命令查看所有核心组件的证书过期时间,https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
[root@k8smaster ~]# 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 Jul 29, 2027 09:13 UTC 330d ca no
apiserver Jul 29, 2027 09:13 UTC 330d ca no
apiserver-etcd-client Jul 29, 2027 09:13 UTC 330d etcd-ca no
apiserver-kubelet-client Jul 29, 2027 09:13 UTC 330d ca no
controller-manager.conf Jul 29, 2027 09:13 UTC 330d ca no
etcd-healthcheck-client Jul 29, 2027 09:13 UTC 330d etcd-ca no
etcd-peer Jul 29, 2027 09:13 UTC 330d etcd-ca no
etcd-server Jul 29, 2027 09:13 UTC 330d etcd-ca no
front-proxy-client Jul 29, 2027 09:13 UTC 330d front-proxy-ca no
scheduler.conf Jul 29, 2027 09:13 UTC 330d ca no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Aug 03, 2035 10:40 UTC 8y no
etcd-ca Aug 03, 2035 10:40 UTC 8y no
front-proxy-ca Aug 03, 2035 10:40 UTC 8y no
该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm(admin.conf、controller-manager.conf 和 scheduler.conf) 使用的 kubeconfig 文件中嵌入的客户端证书的到期时间/剩余时间。
另外,kubeadm 会通知用户证书是否由外部管理; 在这种情况下,用户应该小心的手动/使用其他工具来管理证书更新。
上面的列表中没有包含 kubelet.conf 配置文件,因为 kubeadm 将 kubelet 配置为自动更新证书。 轮换的证书位于目录 /var/lib/kubelet/pki。 要修复过期的 kubelet 客户端证书,请参阅 kubelet 客户端证书轮换失败。
[root@k8smaster ~]# kubectl -n kube-system get cm kubeadm-config -o yaml
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
certSANs:
- 10.168.1.125
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 10.168.1.125:6443
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
networking:
dnsDomain: cluster.local
podSubnet: 172.16.0.0/16
serviceSubnet: 10.96.0.0/16
scheduler: {}
kind: ConfigMap
metadata:
creationTimestamp: "2025-08-05T10:40:56Z"
name: kubeadm-config
namespace: kube-system
resourceVersion: "198"
uid: 2f6010c5-2fed-4de8-af0f-37cfe0294d70
查看单个证书文件
如果已知具体的证书文件路径(通常位于 /etc/kubernetes/pki/ 目录下),可以使用 openssl 命令查看其生效和过期时间:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
输出中的 notAfter 即为证书的过期时间。
查看 cert-manager 管理的证书
如果集群中使用了 cert-manager 插件来管理应用层的 TLS 证书,可以使用以下命令查看:
kubectl get certificate --all-namespaces该命令会展示证书的命名空间、名称、就绪状态、关联的 Secret 以及过期时间。
二、 更新(续期)集群证书
更新证书前,务必备份所有证书和配置文件,以防操作失误导致集群无法恢复。
1. 备份关键文件
# 备份证书目录
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak
# 备份 kubeadm 配置文件
cp /etc/kubernetes/kubeadm-config.yaml /etc/kubernetes/kubeadm-config.yaml.bak
# 备份 kubectl 配置文件
cp ~/.kube/config ~/.kube/config.bak2. 全量续期核心证书
使用 kubeadm 一键续期所有核心证书(推荐方式):
kubeadm certs renew all --config=/etc/kubernetes/kubeadm-config.yaml续期完成后,可以再次运行 kubeadm certs check-expiration 确认新证书的有效期。
3. 重启核心组件
证书文件更新后,必须重启控制平面组件才能使其生效。由于这些组件通常以静态 Pod 形式运行,删除后会自动重建:
# 重启 apiserver、etcd、controller-manager、scheduler
kubectl delete pods -n kube-system kube-apiserver-[节点名]
kubectl delete pods -n kube-system etcd-[节点名]
kubectl delete pods -n kube-system kube-controller-manager-[节点名]
kubectl delete pods -n kube-system kube-scheduler-[节点名]
# 重启 kubelet 服务(所有节点均需执行)
systemctl restart kubelet
# 重启 kube-proxy
kubectl delete pods -n kube-system -l k8s-app=kube-proxy4. 更新 kubectl 配置文件
为避免本地 kubectl 客户端因证书过期而无法访问集群,需重新生成并替换配置文件:
kubeadm kubeconfig user --client-name=admin --config=/etc/kubernetes/kubeadm-config.yaml > /etc/kubernetes/admin.conf
cp /etc/kubernetes/admin.conf ~/.kube/config
chmod 600 ~/.kube/config5. 验证集群状态
执行以下命令,确保集群通信正常且无报错:
kubectl get nodes
kubectl get pods -n kube-system
kubectl get pods --all-namespaces