查询证书过期时间的方法
使用 openssl 命令可以检查证书过期时间,适用于集群内外的证书文件:
bash
openssl x509 -noout -enddate -in /etc/kubernetes/pki/apiserver.crt
示例输出:
notAfter=May 24 12:00:00 2025 GMT
扫描集群内所有证书过期时间
通过 kubeadm 工具一键检查集群证书有效期:
bash
kubeadm certs check-expiration
输出结果将显示:
- 证书路径
- 过期时间
- 剩余天数
- 是否自动续订
检查 kubeconfig 文件中的证书
提取 kubeconfig 中的证书并验证有效期:
bash
grep client-certificate ~/.kube/config | awk '{print $2}' | xargs openssl x509 -noout -enddate
自动监控脚本示例
以下 Shell 脚本可批量扫描指定目录下的证书:
bash
#!/bin/bash
CERT_DIR="/etc/kubernetes/pki"
THRESHOLD_DAYS=30
find $CERT_DIR -type f -name "*.crt" | while read cert; do
expiry=$(openssl x509 -enddate -noout -in "$cert" | cut -d= -f2)
remaining_days=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ $remaining_days -lt $THRESHOLD_DAYS ]; then
echo "ALERT: $cert 将在 $remaining_days 天后过期 ($expiry)"
fi
done
使用 kubelet 证书API
通过 Kubernetes API 获取 kubelet 证书信息:
bash
kubectl get --raw /api/v1/nodes/<node-name>/proxy/configz | jq '.kubeletConfig.serverTLSBootstrap'
第三方工具推荐
- cert-manager:自动管理证书生命周期,支持告警功能
- kube-cert-manager:专为 Kubernetes 设计的证书监控工具
- Prometheus SSL Exporter:提供证书过期指标并集成告警系统
关键证书位置说明
/etc/kubernetes/pki/:控制平面核心证书/var/lib/kubelet/pki/:kubelet 客户端证书~/.kube/config:用户访问凭据/etc/kubernetes/manifests/:静态 Pod 使用的证书
证书续订操作
对于 kubeadm 管理的集群,执行自动续订:
bash
kubeadm certs renew all
完成后需重启控制平面组件:
bash
docker restart $(docker ps -q -f name=k8s_apiserver)