轮替管理员集群 CA 证书

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 证书和控制平面证书将在集群创建一段时间后过期。

过期期限取决于集群类型及其创建版本:

  • 高级集群:
    • 10 年有效期
  • 非高级集群:
    • 在 1.5 版之前创建:有效期为 10 年
    • 在版本 1.5 至 1.16 之间创建:5 年有效期
    • 创建时间晚于 1.16 版:有效期为 30 年

集群升级期间,控制平面证书会自动轮替,但 CA 证书不会自动轮替。这意味着,除了常规版本升级之外,CA 证书轮替必须在 CA 的失效日期之前执行。

限制

  • 请注意高级集群的以下限制:

    • 1.31 版:高级集群不支持 CA 轮替。
    • 1.32 版及更高版本:高级集群支持 CA 轮替,但存在一些细微差异,本文档会在适用情况下说明这些差异。
  • 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 文件的路径

该命令的行为因是否启用高级集群而异:

未启用

gkectl update credentials certificate-authorities rotate 命令会启动并执行轮替的前半部分。然后,该命令会暂停,以便您运行下一个命令来更新 kubeconfig 文件。

更新 kubeconfig 文件

gkectl update credentials certificate-authorities rotate命令暂停时,请更新管理员集群的 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

已启用

如果已启用高级集群,则 gkectl update credentials certificate-authorities rotate 命令是同步的。该命令会在 CA 轮替过程中向管理员工作站输出状态消息。

在 CA 成功轮替后,该命令会退出并自动生成新的 kubeconfig 文件。您在命令中指定的 kubeconfig 文件会被替换为新文件。输出的结果应类似于以下内容:

Beginning CA rotation with generated CA
...
Successfully rotated CA for admin cluster. The kubeconfig file
"/home/ubuntu/kubeconfig" has been updated.
Done rotating certificate-authorities

分发新的 kubeconfig 文件

将新的管理员集群 kubeconfig 文件分发到所有集群用户。