使用 Workload Identity

本页面介绍如何通过启用 Workload Identity 来对 Cloud Run for Anthos on Google Cloud 服务进行身份验证以使用 Google Cloud API。

要在 GKE 集群中使用 Google Cloud API(例如 Compute API、Storage and Database API 或 Machine Learning API),您必须具有相应权限,并通过启用 Workload Identity 且绑定 Kubernetes 服务帐号以充当 Google 服务帐号来对 Cloud Run for Anthos 服务进行身份验证。

在集群上启用 Workload Identity

如需使用 Cloud Run for Anthos 设置 Workload Identity,请参阅以下说明,在集群上启用它;否则,请跳到下一部分:

在新集群上启用 Workload Identity在现有集群上启用 Workload Identity

使用 Workload Identity 启用集群上的指标

启用 Workload Identity 后,Cloud Run for Anthos 不会报告某些指标(例如 Google Cloud 的运维套件的修订版本请求计数或请求延迟),但会继续报告 CPU 和内存的指标。

要启用所有指标,您需要向与 Cloud Run for Anthos 服务关联的 Google 服务帐号 (GSA) 授予 Monitoring Metric Writer 角色,以手动设置向 Cloud Monitoring 写入指标的权限。

向服务的 GSA 授予 Monitoring Metric Writer 角色权限:

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
--role=roles/monitoring.metricWriter

替换:

  • PROJECT_ID 替换为托管您的 KSA 的集群项目的 ID。
  • GSA_PROJECT 替换为不在集群中的 GSA 的项目 ID。您可以在组织中使用任何 GSA。

如需了解详情,请参阅授予、更改和撤消对资源的访问权限

绑定服务帐号

您需要为 Kubernetes 服务帐号 (KSA) 设置关系以充当 Google 服务帐号 (GSA)。任何以 KSA 运行的工作负载在访问 Google Cloud API 时,都会自动以 GSA 进行身份验证。

  1. 如果 Kubernetes 服务帐号 (KSA) 不存在,请在 Cloud Run for Anthos 服务所在的 Kubernetes 命名空间中创建一个;否则,请跳至下一步:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  2. 在 KSA 和 GSA 之间创建关系,以便以 KSA 身份运行的工作负载在访问 Google Cloud API 时自动作为 GSA 进行身份验证:

    1. 授权您的 KSA 充当 GSA:

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
    2. 更新集群以使用绑定:

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE \
       KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com

使用新身份部署新服务

使用您要部署的服务的集群和命名空间中存在的 KSA 部署您的服务。该服务帐号可能属于与该集群所属项目不同的项目。

控制台

  1. 转到 Cloud Run for Anthos on Google Cloud

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 在“高级设置”下,点击容器

    image

  4. 点击服务帐号下拉列表,然后选择所需的服务帐号。

  5. 点击创建部署

gcloud

您可以使用以下命令更新现有服务以拥有新的运行时服务帐号:

gcloud kuberun core services update SERVICE --service-account SERVICE_ACCOUNT

替换:

  • SERVICE 替换为您的服务名称。
  • SERVICE_ACCOUNT 替换为与新身份关联的服务帐号。 您还可以在部署期间使用以下命令设置服务帐号:
gcloud kuberun core services create --image IMAGE_URL --service-account SERVICE_ACCOUNT

替换:

  • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/myproject/my-image:latest
  • SERVICE_ACCOUNT 替换为与新身份关联的服务帐号。

YAML

如需使用 YAML 文件修改现有服务的配置,请获取当前配置的副本,修改相应配置并将更改保存到本地文件内,然后再将这些更改部署到服务中。

  1. 显示为 YAML,然后将服务的配置复制到本地文件(例如 service.yaml)中:

    gcloud kuberun core services describe SERVICE --format yaml

    SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。

  2. 在本地文件中,更新 serviceAccountName: 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

    替换

    • SERVICE 替换为您的 Cloud Run for Anthos on Google Cloud 服务的名称。
    • SERVICE_ACCOUNT 替换为与新身份关联的服务帐号。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml