您可以轮替 Google Distributed Cloud 用户集群中的核心系统证书授权机构 (CA),以便在这些 CA 到期之前进行续订。在轮替期间,管理员集群会将用户集群的 CA 替换为新生成的 CA,然后将新 CA 颁发的证书和密钥对分发给系统组件。轮替是渐进式进行的,因此系统组件可以继续通信,但工作负载和节点会重启。如需在管理员集群中轮替 CA,请参阅轮替管理员集群 CA 证书。
关于用户集群 CA
管理员集群会为每个用户集群管理三个自签名系统 CA。每个 CA 都会向各个系统组件颁发证书(称为“叶证书”),这些组件使用这些证书来对其连接进行身份验证和加密:
- etcd CA 可保护从 API 服务器到 etcd 副本之间的通信,以及 etcd 副本之间的流量。
- 集群 CA 可保护 API 服务器与所有内部 Kubernetes API 客户端(kubelet、控制器、调度器)之间的通信。
- 前端代理 CA 可保护与聚合 API 之间的通信。
您还可以使用组织 CA 来对 authentication.sni 选项配置的证书进行签名,该证书用于向集群外部的客户端提供 Kubernetes API。您需要管理此 CA 并手动生成 SNI 证书。用户集群 CA 轮替不会影响组织 CA 或 SNI 证书。
限制
请注意高级集群的以下限制:
- 1.31 版:高级集群不支持 CA 变换。
- 1.32 版及更高版本:高级集群支持 CA 变换,但存在一些细微差异,本文档在适用情况下说明了这些差异。
CA 证书轮替仅限于之前提到的 etcd、集群和前端代理 CA。
CA 证书轮替仅限于 Google Distributed Cloud 自动颁发的证书。它不会更新管理员手动颁发的证书,即使这些证书是由系统 CA 签名的也是如此。
CA 轮替期间会多次重启 API 服务器、其他控制平面进程以及集群中的每个节点。CA 轮替的每个阶段都与集群升级类似。虽然用户集群在 CA 轮替期间确实仍可正常工作,但您应该预料到工作负载会被重启和重新安排。如果用户集群没有高可用性控制平面,您也应该预料到控制平面会出现短暂停机。
您必须在 CA 轮替完成后更新用户集群 kubeconfig 文件和身份验证配置文件。这是因为旧的集群证书已被撤消,因此 kubeconfig 文件中的凭据不再有效。
CA 轮替启动后,将无法暂停或回滚。
CA 轮替可能需要相当长的时间才能完成,具体取决于用户集群的大小。
执行 CA 轮替
启动轮替:
gkectl update credentials certificate-authorities rotate \ --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG替换以下内容:
USER_CLUSTER_CONFIG:用户集群配置文件的路径
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
该命令的行为因是否启用了高级集群而异:
未启用
如果集群上未启用高级集群,则该命令是异步的,会启动 CA 变换,然后退出。在 CA 变换的整个过程中,您无需观察该命令的输出。您可以通过运行 gkectl update credentials certificate-authorities status 命令来定期检查进度。
如果 CA 变换成功启动,您会看到类似于以下内容的消息:
successfully started the CA rotation with CAVersion 2, use gkectl update credentials certificate-authorities status command to view the current state of CA rotation
如果 CA 变换已在进行中,您会看到类似于以下内容的错误消息:
Exit with error: admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request: requests must not modify CAVersion when cluster is not ready: ready condition is not true: ClusterCreateOrUpdate: Creating or updating user cluster control plane workloads
如需查看变换状态,请运行以下命令:
gkectl update credentials certificate-authorities status \
--config USER_CLUSTER_CONFIG \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
上述命令会报告 CAVersion,这是一个整数,系统会自动递增此数字,以区分轮替前后使用的 CA。此外,该命令还会报告一个指示 CA 轮替是否完成的状态(True 或 False)以及一条描述每个系统组件当前正在使用的 CAVersion 的消息。
如果 CA 轮替已完成,您会看到类似于以下内容的消息:
State of CARotation with CAVersion 2 is - status: True, reason: CARotationCompleted, message: Control plane has CA bundle [2], certs from CA 2, CA 2 is CSR signer. Data plane has CA bundle [2], CA 2 was CSR signer at last restart.
如果 CA 轮替仍在进行中,您会看到类似于以下内容的消息:
State of CARotation with CAVersion 2 is - status: False, reason: CARotationProgressed, message: Control plane has CA bundle [1 2], certs from CA 2, CA 1 is CSR signer. Data plane has CA bundle [1 2], CA 1 was CSR signer at last restart.
更新用户集群凭据
在未启用高级集群的集群上,您必须从管理员集群获取新用户集群 kubeconfig 文件。这是因为 CA 变换会撤销旧 kubeconfig 文件所基于的 CA。
获取新的 kubeconfig 文件:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret admin \
-n USER_CLUSTER_NAME -o jsonpath='{.data.admin\.conf}' \
| base64 --decode > USER_CLUSTER_NAME-kubeconfig
已启用
如果启用了高级集群,则 gkectl update credentials
certificate-authorities rotate 命令是同步的。该命令会在 CA 轮替过程中向管理员工作站输出状态消息。
在 CA 成功变换后,该命令会退出并自动生成新的 kubeconfig 文件。命令输出会提供新 kubeconfig 文件的名称,类似于以下内容:
Beginning CA rotation with generated CA ... Successfully rotated CA for user cluster "USER_CLUSTER_NAME". The kubeconfig file "/home/ubuntu"/USER_CLUSTER_NAME-kubeconfig" has been updated.
新 kubeconfig 位于您在该命令中指定的管理员集群 kubeconfig 所在的目录中。新 kubeconfig 的名称为 USER_CLUSTER_NAME-kubeconfig。
分发新的 kubeconfig 文件
将新的 kubeconfig 文件分发给使用 kubeconfig 文件与集群交互的每个人。
更新身份验证配置文件
CA 轮替完成后,必须更新并重新分发身份验证配置文件。如需了解详情,请参阅管理用户身份。
控制平面证书轮替
如果不进行轮替,用户集群 CA 和控制平面证书将在集群创建之日起 10 年后过期(对于 1.36.100 之前的版本,这些证书将在 5 年后过期)。用户集群的控制平面证书会在每个用户集群升级后的 10 小时内自动轮替,但 CA 不会自动进行轮替。这意味着,除了常规版本升级之外,CA 轮替必须至少每 10 年(对于 1.36.100 之前的版本,则为 5 年)执行一次。
为了防止用户集群不可用,控制平面证书会在用户集群升级后 10 小时内轮替。当这种情况发生时,用户集群的 CA 轮替状态中会显示一条消息。
如需查看用户集群在控制平面证书轮替时升级到的最后一个版本,请执行以下操作:
gkectl update credentials certificate-authorities status \ --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
此信息会在升级后的 10 小时内显示在 message 字段的末尾。例如:
Last Leaf Certificates Rotation Version: 1.16.0-gke.0.
排查 CA 轮替问题
gkectl diagnose 命令支持针对用户集群检查已完成的 CA 轮替的预期状态。如需了解如何在用户集群上运行 gkectl diagnose,请参阅诊断集群问题。如果您遇到 CA 轮替问题,请与 Google 支持团队联系并提供 gkectl diagnose 输出。