轮替 KSA 签名密钥

Kubernetes 服务帐号 (KSA) 为 Pod 中运行的进程提供身份。

Kubernetes 服务账号与应用用于对 Google Cloud API 进行授权调用的 Google Cloud 服务账号不同。

Google Distributed Cloud 会使用私有加密密钥对其颁发给 Pod 的 KSA 令牌进行签名。它在 Pod 向 Kubernetes API 服务器发送请求时,使用相应的公钥验证令牌。当 Pod 使用 Workload Identity 调用 Google Cloud API 时,Google Cloud 会使用同一公钥对 Pod 的身份进行身份验证。

在用户集群创建期间,Google Distributed Cloud 会生成私钥和公钥。此外,在集群创建期间,Google Distributed Cloud 会将集群注册到舰队,并向 Google Cloud 提供公钥。

稍后,您可以轮替私钥/公钥对。轮替会自动颁发由新私钥签名的新令牌。在轮替结束时,集群会出现新的私钥、新的公钥和刷新令牌。此外,Google Cloud 还具有新的公钥。

绑定令牌和旧版令牌

Pod 在调用 Kubernetes API 服务器时可以使用旧版令牌或绑定令牌进行身份验证和授权。绑定令牌的生命周期有限,并使用映射卷分发给 Pod。旧版令牌永不过期,并保留在 Kubernetes Secret 中。我们建议您使用绑定令牌,因为它们更安全。

绑定令牌和旧版令牌在密钥轮替期间都会刷新。

启动密钥轮替

在开始密钥轮替之前,请考虑以下几点:

  • 在密钥轮替期间,您无法开始另一个密钥轮替、证书授权机构轮替或集群更新。

  • 无法暂停或回滚密钥轮替。所有旧密钥都会被删除。

  • 密钥轮替会删除现有集群节点并创建新节点。

如需启动密钥轮替,请执行以下操作:

gkectl update credentials ksa-signing-key rotate \
    --config USER_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONIFG \
    [--skip-prompt]

请替换以下内容:

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

  • ADMIN_KUBECONFIG_FILE:管理员集群 kubeconfig 文件的路径

如果您不想收到提示,请添加 --skip-prompt

查看密钥轮替的状态

如需查看密钥轮替的状态,请执行以下操作:

gkectl update credentials ksa-signing-key status \
    --config USER_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONIFG

如果密钥轮替已完成,您将看到类似于以下内容的消息:

State of KSASigningKeyRotation with KSASigningKeyVersion 2 is -
status: True,
reason: KSASigningKeyRotationCompleted,
message:{"tokenVersion":2,"privateKeyVersion":2,"publicKeyVersions":[2]}

如果 KSA 签名密钥轮替仍在进行中,您将看到类似于以下内容的消息:

State of KSASigningKeyRotation with KSASigningKeyVersion 2 is -
status: False,
reason: KSASigningKeyRotationProcessedReason,
message:{"tokenVersion":2,"privateKeyVersion":2,"publicKeyVersions":[1,2]}