Gardener项目中的Shoot集群凭证轮换机制详解
概述
在Gardener项目中,Shoot集群需要使用多种凭证来确保各组件间的安全通信和集群可操作性。本文将全面解析这些凭证的轮换机制,帮助管理员维护集群安全性。
凭证分类
Shoot集群凭证主要分为两大类:
- 用户提供的凭证(如云供应商密钥)
- Gardener生成的凭证(如证书、SSH密钥等)
用户提供的凭证管理
云供应商密钥
这些凭证用于Gardener和Kubernetes控制器与云供应商API的交互,主要功能包括:
- 基础设施设置和维护(网络、安全组等)
- 负载均衡器和路由管理
- 存储卷和磁盘管理
轮换步骤
- 更新Secret中的凭证数据
- 等待所有使用该Secret的Shoot完成协调
- 可选:通过立即维护操作验证新凭证有效性
- 确认所有Shoot协调完成后,在云供应商账户中停用旧凭证
重要提示:不同云供应商的Secret数据结构不同,请参考相应文档。
Gardener生成的凭证管理
Gardener在创建Shoot集群时会自动生成多种凭证,包括:
- 证书颁发机构及相关证书
- 监控系统(Plutono)密码
- 工作节点SSH密钥对
- ETCD加密密钥
- ServiceAccount令牌签名密钥等
批量凭证轮换
Gardener提供了便捷的批量轮换机制,分为两个阶段:
第一阶段:准备轮换
kubectl -n <命名空间> annotate shoot <集群名称> gardener.cloud/operation=rotate-credentials-start
此操作会触发:
- 创建新凭证
- 保留旧凭证以保持兼容性
- 自动滚动更新工作节点
状态检查:通过.status.credentials.rotation
字段监控进度
第二阶段:完成轮换
kubectl -n <命名空间> annotate shoot <集群名称> gardener.cloud/operation=rotate-credentials-complete
此操作会:
- 移除旧凭证
- 完成轮换过程
独立凭证轮换详解
1. 证书颁发机构(CA)轮换
采用三阶段轮换机制:
- 准备阶段:创建新CA并加入信任链
- 客户端更新阶段:更新所有外部API客户端
- 完成阶段:移除旧CA
特殊场景处理:
- 延迟工作节点滚动更新:使用
rotate-ca-start-without-workers-rollout
- 手动就地更新:需等待所有工作池完成更新
2. 监控系统凭证轮换
kubectl -n <命名空间> annotate shoot <集群名称> gardener.cloud/operation=rotate-observability-credentials
注意:不适用于已标记删除的Shoot集群
3. SSH密钥对轮换
kubectl -n <命名空间> annotate shoot <集群名称> gardener.cloud/operation=rotate-ssh-keypair
特点:
- 新密钥会部署到所有工作节点
- 旧密钥仍保持有效,直到下次轮换
- 旧密钥存储在
<集群名称>.ssh-keypair.old
Secret中
4. ETCD加密密钥轮换
三阶段过程:
- 添加新密钥
- 重写所有Secret资源
- 移除旧密钥
操作命令:
# 开始轮换
kubectl annotate shoot <集群名称> gardener.cloud/operation=rotate-etcd-encryption-key-start
# 完成轮换
kubectl annotate shoot <集群名称> gardener.cloud/operation=rotate-etcd-encryption-key-complete
5. ServiceAccount令牌签名密钥轮换
类似CA轮换的三阶段过程:
- 添加新签名密钥
- 更新外部客户端
- 移除旧密钥
注意事项:
- 需要手动为外部客户端创建新的ServiceAccount令牌
- Kubernetes v1.22+版本中静态令牌不再自动创建
最佳实践建议
- 建立定期轮换计划,建议每3-6个月轮换一次关键凭证
- 优先使用批量轮换操作简化流程
- 生产环境建议在低峰期执行轮换操作
- 每次轮换后验证所有核心功能
- 保留旧凭证一段时间作为回退方案
通过合理规划和管理凭证轮换,可以显著提升Shoot集群的安全性和可靠性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考