Kubernetes 证书管理
Kubernetes 使用多种证书来确保集群组件之间的安全通信。以下是关于 Kubernetes 证书管理的详细介绍:
主要证书类型
-
CA (Certificate Authority) 证书
- 集群的根证书,用于签署其他所有证书
- 通常位于
/etc/kubernetes/pki/ca.crt
和/etc/kubernetes/pki/ca.key
-
API Server 证书
- 用于验证 API Server 的身份
- 包含所有可能的 API Server 访问名称 (DNS 和 IP)
-
kubelet 客户端证书
- 允许 API Server 与 kubelet 通信
-
etcd 相关证书
- etcd 服务器证书
- etcd 对等通信证书
- etcd 客户端证书
-
Service Account 密钥对
- 用于签署 Service Account token
证书管理工具
kubeadm 证书命令
# 检查证书过期情况
kubeadm certs check-expiration
# 更新所有证书
kubeadm certs renew all
# 更新特定证书,如 apiserver
kubeadm certs renew apiserver
手动管理证书
-
生成证书签名请求 (CSR)
openssl req -new -key new.key -out new.csr -subj "/CN=example-user"
-
批准 CSR
kubectl certificate approve <csr-name>
证书自动续期
Kubernetes 从 v1.15 开始支持证书自动续期功能:
-
kubelet 证书自动续期
- 通过
--rotate-certificates
参数启用 - 需要配置正确的
--cluster-dns
和--cluster-domain
- 通过
-
kubeadm 集群
- 默认启用自动续期
- 证书在过期前 30 天自动更新
最佳实践
-
定期检查证书过期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
-
备份证书目录
cp -r /etc/kubernetes/pki /backup/pki
-
使用外部 CA
- 对于生产环境,考虑使用企业级 CA 而非 Kubernetes 自签证书
-
监控证书过期
- 设置监控系统检查证书过期时间
-
证书轮换策略
- 制定定期轮换策略,即使证书未过期也定期更换
常见问题处理
-
证书过期症状
- API Server 无法启动
- kubectl 命令返回证书错误
- 节点状态变为 NotReady
-
修复过期证书
- 对于 kubeadm 集群,使用
kubeadm certs renew
- 对于手动部署集群,需要重新生成并分发证书
- 对于 kubeadm 集群,使用
-
查看集群证书信息
kubectl get csr kubectl get certificatesigningrequests
通过良好的证书管理实践,可以确保 Kubernetes 集群的安全性和持续可用性。