Kubernetes 证书过期灾难?四步紧急处理方案

在Kubernetes(K8s)运维中,证书管理往往是容易被忽视的关键环节。许多运维团队在集群搭建初期配置好证书后,便很少再去关注,直到某天集群突然不可用,才发现——证书过期了!

证书过期可能导致API Server拒绝连接、节点失联、Pod调度失败,甚至整个集群瘫痪。

本文将深入介绍K8s证书管理的相关细节,帮助你避免因证书问题导致的灾难性故障。

1. 哪些证书容易成为“定时炸弹”?

Kubernetes集群依赖多种证书进行安全通信,主要包括:

(1) CA证书(根证书)

用于签发其他证书,一旦CA证书过期,所有依赖它的证书都会失效。

默认有效期通常为10年,但许多团队忘记更新。

(2) API Server证书

控制平面通信的核心证书,过期会导致kubectl无法访问集群。

(3) etcd证书

如果etcd证书过期,K8s将无法读写数据,集群可能完全崩溃。

(4) kubelet客户端证书

每个节点的kubelet使用该证书与API Server通信,过期会导致节点失联。

(5) Service Account Token

虽然不是传统证书,但也有过期时间(默认1年),影响Pod与API Server的认证。

2. 证书过期的典型故障现象

当K8s证书过期时,可能会出现以下问题:

  故障现象

可能过期的证书

kubectl get nodes超时

API Server证书或kubeconfig

  节点状态变为 NotReady

kubelet客户端证书

Pod调度失败,报x509错误

Service Account Token

etcd集群不可用

etcd证书

3. 如何检测证书是否即将过期?

方法1:使用kubeadm检查(适用于kubeadm部署的集群)

复制
kubeadm certs check-expiration1.

输出示例:

复制
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED admin.conf Aug 05, 2025 12:11 UTC 91d ca no apiserver Aug 05, 2025 12:11 UTC 91d ca no apiserver-etcd-client Aug 05, 2025 12:11 UTC 91d etcd-ca no apiserver-kubelet-client Aug 05, 2025 12:11 UTC 91d ca no1.2.3.4.5.

方法2:手动检查单个证书

复制
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates1.

输出:

复制
notBefore=May 15 08:00:00 2023 GMT notAfter=May 12 08:23:00 2024 GMT # 过期时间1.2.

方法3:使用Prometheus监控(长期方案)

配置kube-cert-exporter或自定义脚本,结合告警系统(如Alertmanager)提前预警。

4. 证书更新处理方案

(1) 使用kubeadm自动续期所有证书

复制
kubeadm certs renew all1.

(2) 重启控制平台组件

复制
docker ps | grep -E k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd | awk -F {print $1} | xargs docker restart1.

(3) 重启kubelet服务

复制
systemctl restart kubelet1.

(4) 检查容器状态、kubelet服务状态和message日志是否有报错等。

注:如果有多台Master主机,需要在每台机器上重复上面步骤。

阅读剩余
THE END