使用 Workload Identity

了解如何使用 Google Cloud 控制台中的 Workload Identity 可以访问 Google Cloud API,例如计算 API、存储和 数据库 API,即机器学习 API。

如需对 Knative serving 服务进行身份验证,您必须:

  1. 在集群中启用 Workload Identity
  2. 配置权限
  3. 绑定您的 Kubernetes 服务账号 (沙特阿拉伯)分配给 Google 服务账号 (GSA)

完成这些步骤后,您便可部署一项新的 Knative serving 服务 使用您创建的身份。

在集群上启用 Workload Identity

如需通过 Knative serving 设置 Workload Identity,您可以 舰队工作负载身份联合 而不是使用 Google Cloud 服务账号 JSON 文件。

配置权限以启用所有指标

要启用指标(如报告请求数或请求延迟时间) Google Cloud Observability,您需要向 Cloud Monitoring 授予写入权限。对于 例如,您可以将 Monitoring Metric Writer 角色 (roles/monitoring.metricWriter) 关联至您 与 Knative serving 关联了 拥有写入监控数据的权限。如需详细了解如何创建 Google 服务账号,请参阅使用服务账号

绑定服务账号

您需要为 Kubernetes 服务账号 (KSA) 设置关系以充当 Google 服务账号 (GSA)。作为您绑定的 KSA 运行的任何工作负载在访问 Google Cloud API 时,都会自动以 GSA 进行身份验证。您绑定的 KSA 必须存在于 您要使用 Workload Identity 的 Knative serving 服务。 GSA 可以属于与集群所在的 Google Cloud 项目不同的 Google Cloud 项目。

  1. 如果 GSA 不存在,请创建一个;否则,请跳到下一步。您可以创建与 Knative serving 搭配使用的 GSA 然后在贵组织的任何 Google Cloud 项目中使用该项目,然后在 运行 Knative serving 服务的 Google Cloud 项目。

    如需创建新的 GSA,请运行以下命令:

    gcloud iam service-accounts create GSA_NAME

    GSA_NAME 替换为新的 Google 服务账号的名称。

    有关将 Google 服务账号用于 如需了解 Knative serving 服务,请参阅 使用服务账号

  2. 确保您的 GSA 具有所需的 IAM 角色。您可以使用以下命令授予其他角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"
    

    替换:

    • PROJECT_ID 替换为您的 Google 服务账号所在的 Google Cloud 项目的 ID。
    • GSA_NAME 替换为您的 Google 服务账号的名称。
    • ROLE_NAME 替换为要分配给您的 GSA 的 IAM 角色,例如 roles/monitoring.metricWriter
  3. 如果 Kubernetes 服务账号不存在,请在同一位置创建一个 Kubernetes 命名空间作为 Knative serving 服务;否则 请跳到下一步:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. 绑定 Kubernetes 和 Google 服务账号以创建 并将其部署到您的集群:

    1. 在这两者之间创建 IAM 政策绑定,以允许 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_ID.iam.gserviceaccount.com

      您需要将其中的:

      • PROJECT_ID 替换为 Kubernetes 服务账号和 Knative serving 服务。
      • K8S_NAMESPACE/KSA_NAME 替换为您的 Kubernetes 服务账号的命名空间和名称。
      • GSA_NAME@GSA_PROJECT_ID 替换为您的 Google 服务账号的名称和 Google Cloud 项目的 ID。您可以在您的组织中使用任何 Google 服务账号。如需查看您的 Google 服务账号,请参阅列出服务账号
    2. 使用 GSA 的电子邮件地址,向 KSA 添加 iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID 注释。

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

      替换:

      • K8S_NAMESPACE/KSA_NAME 替换为您要为其创建绑定的 Kubernetes 服务账号的命名空间和名称。
      • GSA_NAME@GSA_PROJECT_ID 替换为您要为其创建绑定的 Google 服务账号的名称和 Google Cloud 项目的 ID。

部署新服务以使用 Workload Identity

部署新的 Knative serving 服务,该服务使用您先前使用的 Workload Identity 创建。

控制台

  1. 前往 Google Cloud 控制台中的 Knative serving:

    前往 Knative serving

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

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

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

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

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

  7. 点击 Create(创建)以将映像部署到 Knative serving 并等待 让部署完成

命令行

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

    gcloud run services update SERVICE --service-account KSA_NAME
    

    您需要将其中的:

    • SERVICE 替换为您的 Knative serving 服务名称。
    • KSA_NAME 替换为您使用的 Kubernetes 服务账号 即可创建工作负载身份
  • 对于新服务,请运行带有 --service-account 参数的 gcloud run deploy 命令来设置 Kubernetes 服务账号:

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

    替换:

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/cloudrun/hello
    • KSA_NAME 替换为您使用的 Kubernetes 服务账号 即可创建工作负载身份

YAML

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

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

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务。

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

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

    替换

    • SERVICE 替换为您的 Knative serving 服务名称。
    • KSA_NAME 替换为您的 Kubernetes 服务账号 创建工作负载身份的方法。
  3. 运行 以下命令:

    gcloud run services replace service.yaml

迁移现有服务以使用 Workload Identity

如果您在现有集群上启用了 Workload Identity,则必须迁移集群上要使用 Workload Identity 的每项服务。了解如何迁移现有服务

后续步骤

了解如何管理访问权限(对服务的访问权限)。