Kubernetes 手动轮换 CA 证书权威指南
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
前言
在 Kubernetes 集群中,证书机构(CA)证书是安全通信的基础。随着时间推移,出于安全考虑或证书到期等原因,管理员需要轮换这些 CA 证书。本文将详细介绍在 Kubernetes 集群中手动轮换 CA 证书的完整流程和注意事项。
准备工作
在开始之前,请确保:
- 已安装 kubectl 命令行工具
- 拥有集群管理员权限
- 已备份所有关键文件和配置
- 理解 Kubernetes 认证机制和证书体系
轮换流程详解
第一阶段:部署新 CA 证书
-
分发新证书:
- 将新生成的 CA 证书和私钥(
ca.crt
,ca.key
,front-proxy-ca.crt
,front-proxy-ca.key
)分发到所有控制平面节点 - 建议使用安全通道传输这些重要文件
- 将新生成的 CA 证书和私钥(
-
更新控制器管理器:
- 修改 kube-controller-manager 的
--root-ca-file
参数,使其包含新旧 CA 证书 - 重启控制器管理器使更改生效
- 注意处理
--client-ca-file
和--cluster-signing-cert-file
标志的特殊要求
- 修改 kube-controller-manager 的
第二阶段:更新集群组件
-
等待 Secret 更新:
- 控制器管理器会自动更新 ServiceAccount 的 Secret,包含新旧 CA
- 新创建的 Pod 将自动信任两个 CA
-
重启系统组件:
- 有计划地重启 kube-proxy、CoreDNS 等使用集群内配置的组件
- 确保关键系统组件正常运行
-
更新 API 服务器配置:
- 修改 kube-apiserver 配置,在
--client-ca-file
和--kubelet-certificate-authority
中包含新旧 CA - 同样更新 kube-scheduler 的
--client-ca-file
配置
- 修改 kube-apiserver 配置,在
第三阶段:更新用户证书
-
更新用户凭证:
- 为用户账号重新生成客户端证书
- 更新 kubeconfig 文件中的 CA 证书数据
- 确保管理员和普通用户的访问不受影响
-
处理云控制器管理器:
- 如果集群使用 cloud-controller-manager,同样更新其 CA 配置
- 重启使其加载新配置
第四阶段:滚动更新集群
-
有序重启组件:
- 先重启聚合 API 服务器和 webhook 处理器
- 然后更新所有节点的 kubelet 配置
- 最后重启 API 服务器使用新 CA 签发的新证书
-
工作负载更新:
- 使用注解触发 Deployment 和 DaemonSet 的滚动更新
- 考虑使用 Pod 干扰预算(PDB)控制更新节奏
- 对于 StatefulSet 采取适当的更新策略
第五阶段:完成轮换
-
更新集群信息:
- 更新
kube-public
命名空间中的 cluster-info ConfigMap - 确保新节点加入时使用正确的 CA
- 更新
-
全面验证:
- 检查所有组件日志,确认无 TLS 错误
- 验证集群各项功能正常
-
清理旧 CA:
- 更新服务账号令牌仅包含新 CA
- 从各组件配置中移除旧 CA 引用
- 最终完成所有节点的更新
注意事项
- 备份至关重要:操作前务必备份所有证书和关键配置
- 高可用考虑:确保 API 服务器的高可用性,避免服务中断
- 分阶段执行:严格按步骤操作,验证每个阶段后再继续
- 监控验证:密切监控集群状态,及时发现问题
- 回滚计划:准备详细的回滚方案以备不时之需
常见问题处理
- 证书创建工具:可以使用 openssl 或 cfssl 生成新证书
- 单节点集群:会有短暂服务中断,需安排在维护窗口
- 长期运行 Pod:需要特别处理,确保其获取更新后的 CA
- 节点加入:确保新节点加入流程使用正确的 CA
通过遵循本指南,您可以安全地完成 Kubernetes 集群 CA 证书的手动轮换,确保持续的安全性和可靠性。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考