使用 Workload Identity

本页面介绍如何通过启用 Workload Identity 来对 Cloud Run for Anthos 服务进行身份验证以使用 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 Console 中的 Cloud Run for Anthos:

    转到 Cloud Run for Anthos

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

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

    映像

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

  5. 点击下一步以转到下一部分。

  6. 配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。

  7. 点击创建以将映像部署到 Cloud Run for Anthos,然后等待部署完成。

命令行

  • 对于现有服务,请运行带有以下参数的 gcloud run services update 命令来配置运行时服务帐号:

    gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

    您需要将其中的:

    • SERVICE 替换为您的服务名称。
    • SERVICE_ACCOUNT 替换为与新身份关联的服务帐号。
  • 对于新服务,请运行带有 --service-account 参数的 gcloud run deploy 命令来配置运行时服务帐号:

    gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

    您需要将其中的:

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

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud beta run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.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 服务的名称。
    • SERVICE_ACCOUNT 替换为与新身份关联的服务帐号。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml