Google Distributed Cloud 使用证书和私钥对管理员集群中 Kubernetes 系统组件之间的通信进行身份验证。创建管理员集群时,系统会创建新的证书授权机构 (CA) 证书,这些根证书用于为 Kubernetes 系统组件颁发其他叶证书。
本指南仅适用于管理员集群 CA 证书轮替。对于用户集群,请参阅轮替用户集群 CA 证书。
管理员集群中的 Kubernetes 系统使用三种 CA 证书:
etcd CA 证书可保护从 Kubernetes API 服务器到 etcd 副本之间的通信,以及 etcd 副本之间的通信。此证书是自签名证书。
集群 CA 证书可保护 Kubernetes API 服务器与所有内部 Kubernetes API 客户端(例如 kubelet、控制器管理器和调度器)之间的通信。此证书是自签名证书。
前端代理 CA 证书可保护与聚合 API 之间的通信。此证书是自签名证书。
您可以使用 gkectl
来触发证书轮替。在轮替期间,gkectl
会将管理员集群的核心系统 CA 证书替换为新生成的证书。然后,它会将新的 CA 证书、叶证书和私钥分发到管理员集群系统组件。轮替是渐进式进行的,因此系统组件可以在轮替期间继续正常通信。但请注意,工作负载和节点会在轮替期间重启。
如果不进行轮替,CA 证书和控制平面证书将在集群创建的五年后过期。集群升级期间,控制平面证书会自动轮替,但 CA 证书不会自动轮替。这意味着,除了常规版本升级之外,CA 证书轮替必须至少每 5 年执行一次。
限制
CA 证书轮替仅限于之前提到的 etcd、集群和前端代理证书。
CA 证书轮替仅限于 Google Distributed Cloud 自动颁发的证书。此功能不会更新管理员手动颁发的证书,即使这些证书是由系统 CA 签名的。
CA 证书轮替会多次重启 Kubernetes API 服务器、其他控制平面进程和管理员集群中的每个节点。轮替的每个阶段都与集群升级类似。虽然管理员集群和管理员集群管理的用户集群在证书轮替期间仍可运行,但管理员集群中的工作负载应该会重启并重新安排。管理员集群控制平面和用户集群控制平面应该会有短暂的停机时间。
您必须在证书轮替过程中更新管理员集群 kubeconfig 文件,并在轮替完成后再次更新。这是因为旧的集群证书已被撤消,因此 kubeconfig 文件中的凭据将不再有效。
CA 证书轮替启动后就无法回滚。
CA 证书轮替可能需要很长时间才能完成,具体取决于集群的大小。
如果证书轮替中断,则可以重新运行相同的命令来恢复。但是,您必须确保一次只运行一个轮替命令。
启动轮替
如需启动证书轮替,请运行以下命令。它将执行轮替的前半部分,并在暂停点停止。
启动轮替:
gkectl update credentials certificate-authorities rotate \ --admin-cluster \ --config ADMIN_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
请替换以下内容:
ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
如果命令中断,请运行相同的命令来恢复该命令。
更新 kubeconfig 文件
当上述命令暂停时,请更新管理员集群的 kubeconfig 文件。此操作会在 kubeconfig 文件中放置新的客户端证书和新的 CA 证书。旧的客户端证书会从 kubeconfig 文件中移除,旧的 CA 证书保留在 kubeconfig 文件中。
gkectl update credentials certificate-authorities update-kubeconfig \ --admin-cluster \ --config ADMIN_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
继续轮替
运行以下命令以执行该过程的后半部分。在 gkectl
验证更新后的 kubeconfig 文件是否在当前目录中之后,该命令才能继续执行。
gkectl update credentials certificate-authorities rotate \ --admin-cluster \ --complete \ --config ADMIN_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
如果命令中断,请运行相同的命令来恢复该命令。
轮替完成后,系统会报告当前的 CA 版本。
再次更新 kubeconfig 文件
轮替的后半部分完成后,再次更新 kubeconfig 文件。这将从 kubeconfig 文件中移除旧的 CA 证书。
gkectl update credentials certificate-authorities update-kubeconfig \ --admin-cluster \ --config ADMIN_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
分发新的 kubeconfig 文件
将新的管理员集群 kubeconfig 文件分发到所有集群用户。