1. 引言
在 Kubernetes 集群中,证书是保障组件间通信安全的重要基础。然而,这些证书都有有效期,一旦过期,可能导致组件间通信失败,进而引发服务中断。
本文将介绍如何识别和处理 Kubernetes 集群中即将过期或已过期的证书,包括证书检查、更新方法及最佳实践。帮助你避免因证书问题导致的集群故障。
2. Kubernetes 证书简介
Kubernetes 使用多种证书来确保集群内部的安全通信,主要包括:
- ✅ API Server 证书:用于保护 API Server 的通信
- ✅ kubelet 证书:用于 API Server 与 kubelet 之间的通信
- ✅ etcd 证书:用于 API Server 与 etcd 数据库之间的通信
- ✅ 客户端证书:供不同组件认证到 API Server 使用
这些证书都有明确的过期时间。一旦过期,相关组件可能无法正常工作,出现连接失败、认证错误等问题。
3. 识别过期证书
3.1 检查单个证书的过期时间
以 API Server 证书为例,使用 openssl
检查其过期时间:
$ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep 'Not After'
Not After : Aug 13 14:32:00 2024 GMT
命令说明:
openssl x509
:处理 X.509 证书-in
:指定证书路径-noout
:不输出证书编码内容-text
:以文本形式输出证书信息grep 'Not After'
:提取证书过期时间
3.2 批量检查证书过期时间
使用 find
和 openssl
批量检查 /etc/kubernetes/pki/
下所有证书的过期时间(排除 ca.crt
):
$ find /etc/kubernetes/pki/ -type f -name "*.crt" -print | grep -v 'ca.crt$' | xargs -L 1 -t -i bash -c 'openssl x509 -noout -text -in {} | grep "Not After"'
/etc/kubernetes/pki/apiserver.crt
Not After : Apr 13 14:32:00 2024 GMT
/etc/kubernetes/pki/front-proxy-client.crt
Not After : Apr 13 14:32:00 2024 GMT
...
3.3 使用 kubeadm
检查所有证书
如果你使用 kubeadm
管理集群,可以直接使用命令查看所有证书状态:
$ kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 23, 2023 07:15 UTC 364d no
apiserver Oct 23, 2023 07:15 UTC 364d ca no
...
输出内容清晰展示了每个证书的过期时间、剩余时间及签发机构等信息。
4. 更新过期的 Kubernetes 证书
4.1 备份现有证书
更新前建议先备份原有证书,防止更新失败:
$ cp -R /etc/kubernetes/pki /etc/kubernetes/pki.backup
4.2 升级 Kubernetes 自动更新证书
从 Kubernetes 1.15 开始,升级集群时会自动更新证书:
$ kubeadm upgrade plan
$ kubeadm upgrade apply v1.20.1
✅ 优点:自动化程度高,适合大规模集群或定期维护。
⚠️ 注意:升级前务必确认当前版本和目标版本的兼容性。
4.3 使用 kubeadm
手动更新所有证书
如果不升级集群,也可以手动更新所有证书:
$ kubeadm certs renew all
更新后需重启 kubelet:
$ sudo systemctl restart kubelet
4.4 更新指定证书
如只需更新特定证书,例如 API Server:
$ kubeadm certs renew apiserver
✅ 适用场景:仅需更新某几个关键证书时使用。
4.5 更新 kubeconfig 文件
部分证书更新后需要手动更新 kubeconfig
文件:
$ kubeadm init phase kubeconfig admin
$ kubeadm init phase kubeconfig controller-manager
$ kubeadm init phase kubeconfig scheduler
这些命令会重新生成 admin、controller-manager 和 scheduler 的配置文件。
5. 重新生成证书
某些情况下可能需要重新生成证书,比如证书损坏或配置变更。
以 API Server 为例:
$ mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
$ mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
然后使用 kubeadm
重新生成:
$ kubeadm alpha phase certs apiserver
[certs] Generating "apiserver" certificate and key
再生成 kubelet 客户端证书:
$ kubeadm alpha phase certs apiserver-kubelet-client
最后更新 kubeconfig 文件:
$ kubeadm alpha phase kubeconfig all
6. 证书问题排查技巧
6.1 查看日志文件
- API Server 日志:
/var/log/kube-apiserver.log
- Kubelet 日志:
/var/log/kubelet.log
使用 journalctl
查看 kubelet 日志:
$ journalctl -u kubelet
6.2 检查 kubeconfig 文件
使用 kubectl config view
查看当前配置是否正常:
$ kubectl config view
确保证书路径和内容正确。
7. 总结
本文介绍了 Kubernetes 证书的检查、更新与排查方法。总结如下:
- ✅ 使用
openssl
和kubeadm
快速检查证书过期时间 - ✅ 通过升级或手动方式更新证书
- ✅ 必要时可重新生成证书并更新 kubeconfig 文件
- ✅ 遇到问题时通过日志和配置文件排查
通过这些方法,你可以有效避免因证书过期导致的集群中断,保障 Kubernetes 集群的稳定与安全。