Kubernetes 中 kubelet 证书轮换配置指南
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
在 Kubernetes 集群中,kubelet 作为节点代理,需要与 API Server 进行安全通信。这种通信的安全性是通过 TLS 证书来保障的。本文将详细介绍如何为 kubelet 配置证书自动轮换机制,确保持续的安全通信。
证书轮换的必要性
默认情况下,kubelet 使用的证书有效期为一年。虽然较长的有效期减少了管理负担,但也带来了安全隐患:
- 长期有效的证书一旦泄露,攻击者有更长时间可以利用
- 手动更新证书容易遗漏,导致服务中断
- 大规模集群中手动管理证书不现实
Kubernetes 从 1.8 版本开始引入了自动证书轮换功能,并在 1.19 版本中达到稳定状态。
前提条件
- Kubernetes 集群版本 1.8.0 或更高
- 集群正常运行,控制器管理器可正常工作
配置步骤
1. 启用 kubelet 证书轮换
在 kubelet 启动参数中添加:
--rotate-certificates=true
这个参数告诉 kubelet 在当前证书即将过期时自动申请新证书。
2. 配置控制器管理器证书有效期
在 kube-controller-manager 启动参数中设置:
--cluster-signing-duration=8760h
这个参数控制签发证书的有效期,默认值为 8760h(1年)。在 1.19 版本之前,参数名为 --experimental-cluster-signing-duration
。
证书轮换工作原理
初始证书申请
- kubelet 启动时,如果配置了
--bootstrap-kubeconfig
参数,会使用初始证书连接 API Server - kubelet 发送证书签名请求(CSR)
- 可以通过命令查看 CSR 状态:
kubectl get csr
自动批准流程
- 初始 CSR 状态为
Pending
- 控制器管理器检查 CSR 是否符合条件
- 符合条件的 CSR 会被自动批准,状态变为
Approved
- 控制器管理器签署证书,有效期由
--cluster-signing-duration
决定 - 签署的证书附加到 CSR 中
证书更新流程
- kubelet 从 API Server 获取签署的证书
- 证书写入
--cert-dir
指定的目录 - kubelet 开始使用新证书与 API Server 通信
自动轮换触发
当现有证书剩余有效期在 30% 到 10% 之间时,kubelet 会自动:
- 生成新的密钥对
- 创建新的 CSR 并提交
- 获取新签署的证书
- 无缝切换到新证书
最佳实践
- 监控证书有效期:虽然自动轮换减少了管理负担,但仍建议监控证书有效期
- 合理设置有效期:根据安全要求平衡有效期长度和轮换频率
- 测试轮换流程:在非生产环境验证轮换过程
- 备份证书目录:定期备份
--cert-dir
指定的目录
故障排查
如果证书轮换失败,可以检查:
- kubelet 日志中是否有相关错误
- CSR 是否被正确创建和批准
- 控制器管理器是否正常运行
- API Server 是否可访问
总结
Kubernetes 的 kubelet 证书自动轮换功能大大简化了证书管理工作,提高了集群安全性。通过合理配置,可以确保集群长期稳定运行而无需人工干预证书更新。理解这一机制的工作原理,有助于更好地运维 Kubernetes 集群。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考