设置 Google Cloud 资源

本页面介绍了您在创建集群之前需要创建和配置的 Google Cloud 资源。

准备工作

  1. 创建一个 Google Cloud 项目一个结算账号

  2. 如果您不是 Google Cloud 项目所有者,请让项目所有者为您授予以下 Identity and Access Management (IAM) 角色:

    角色 用途
    roles/compute.viewer 必需:在 bmctl 验证集群配置文件中的 clusterOperations.location 字段时需要。
    roles/iam.serviceAccountAdmin 必需:创建 Google Distributed Cloud 所需的服务账号时需要。
    roles/iam.securityAdmin 必需:向 Google Distributed Cloud 所需的服务账号授予 IAM 角色时需要。
    roles/iam.serviceAccountKeyAdmin 必需:为 Google Distributed Cloud 所需的服务账号创建 JSON 密钥文件时需要。
    roles/serviceusage.serviceUsageAdmin 必需:启用 Google Distributed Cloud 所需的 Google API 时需要。
    roles/gkeonprem.admin 可选:如果要使用 GKE On-Prem API 客户端创建集群或将集群配置为由 GKE On-Prem API 管理,则需要此角色。
    roles/gkehub.viewer
    roles/container.viewer
    可选:如果您要访问 Google Cloud 控制台中的 GKE Enterprise 和 Google Kubernetes Engine 页面,则需要此角色。

    如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

启用 API

您必须在关联的 Google Cloud 项目中启用多个 Google API。Google Distributed Cloud 在创建集群时会使用这些 API。您还需要使用这些 API 来保持与 Google Cloud的连接。与 Google Cloud 的连接可让 Google Distributed Cloud 使用 Cloud Logging 和 Cloud Monitoring 以及舰队功能(例如 Cloud Service Mesh、Config Sync、Policy Controller 和 Config Controller)。

如果您要使用 bmctl 工具创建集群,则可以在运行 bmctl create config 时添加 --enable-apis 标志,bmctl 将启用以下 gcloud services enable 命令列出的 API。如果您要使用 GKE On-Prem API 客户端创建管理员集群用户集群,则需要在创建集群之前启用 API。

如需启用 API,请运行以下命令:

  1. 登录 Google Cloud CLI:

    gcloud auth login
    
  2. 启用以下 API:

    gcloud services enable --project=PROJECT_ID \
        anthos.googleapis.com \
        anthosaudit.googleapis.com \
        anthosgke.googleapis.com \
        cloudresourcemanager.googleapis.com \
        compute.googleapis.com \
        connectgateway.googleapis.com \
        container.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        gkeonprem.googleapis.com \
        iam.googleapis.com \
        kubernetesmetadata.googleapis.com \
        logging.googleapis.com \
        monitoring.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        storage.googleapis.com
    

    除了 gkeonprem.googleapis.com 之外,这些 Google API 是您的项目所必需的。以下两个 API 仅适用于 1.29 版及更高版本:

    • compute.googleapis.com
    • kubernetesmetadata.googleapis.com

    如果您在代理后面安装集群,则必须将其中许多 API 添加到允许连接的列表中。如需查看您必须添加到许可名单中的 API 和端点的列表以及其访问理由,请参阅在代理后方安装

  3. 如需查看项目中启用了哪些 API 和服务,请运行以下命令:

    gcloud services list --project=PROJECT_ID \
        --enabled
    

配置服务账号

如需使用 Google API,Google Distributed Cloud 需要一个服务账号,该账号在关联的 Google Cloud 项目中配置了特定的 IAM 角色。最佳做法是针对不同的目的(尤其是在生产环境中)创建单独的服务账号。

如果您要使用 bmctl 工具创建集群,则可以在运行 bmctl create config 时添加 --create-service-accounts 标志,让 bmctl 创建具有所需 IAM 角色的服务账号。如果您要使用 GKE On-Prem API 客户端创建管理员集群,则当您运行命令以创建引导集群时,bmctl register bootstrap 命令默认会创建具有所需 IAM 角色的服务账号。

创建用户集群也需要服务账号,但在创建管理用户集群的管理员集群时,您已经创建和配置了服务账号。

下表介绍了自动创建的服务账号:

服务账号 用途 角色
anthos-baremetal-gcr Google Distributed Cloud 使用此服务账号从 Artifact Registry 下载容器映像。
anthos-baremetal-connect Connect Agent 使用此服务账号来维护集群与 Google Cloud之间的连接。这样,您就能够访问集群和工作负载管理功能(包括 Google Cloud 控制台和 Connect Gateway),以便与集群进行交互。 roles/gkehub.connect
anthos-baremetal-register Connect Agent 使用此服务账号向舰队注册集群。 roles/gkehub.admin
anthos-baremetal-cloud-ops Stackdriver Agent 使用此服务账号将日志和指标从集群导出到 Cloud LoggingCloud Monitoring roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor
roles/monitoring.viewer
roles/serviceusage.serviceUsageViewer
roles/kubernetesmetadata.publisher

手动配置服务账号

如果您愿意,可以手动创建服务账号,为其配置必要的角色,并在创建集群之前下载 JSON 密钥文件。如果您使用 bmctl 创建集群,请将对 JSON 密钥文件的引用添加到相应的集群配置文件。如需查看示例,请参阅修改配置文件。如果您使用 GKE On-Prem API 创建管理员集群,则可以在运行 bmctl register bootstrap 以创建引导集群时指定密钥文件

要创建服务账号和密钥文件,请执行以下操作:

  1. 在管理员工作站上,确保当前目录是 baremetal 目录。

  2. 如果您尚未登录 Google Cloud CLI,请登录:

    gcloud auth login
    
  3. 创建服务账号:

    gcloud iam service-accounts create anthos-baremetal-gcr \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-connect \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-register \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-cloud-ops \
        --project=PROJECT_ID
    
  4. 向服务账号授予所需的 IAM 角色:

    gcloud projects add-iam-policy-binding  PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-connect@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/gkehub.connect"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-register@PROJECT_ID.iam.gserviceaccount.com" \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/stackdriver.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/opsconfigmonitoring.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.dashboardEditor"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.viewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageViewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/kubernetesmetadata.publisher"
    
  5. 下载服务账号 JSON 密钥文件:

    gcloud iam service-accounts keys create anthos-baremetal-gcr.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create connect-agent.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-connect@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create connect-register.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-register@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create anthos-baremetal-cloud-ops.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

配置可访问 Cloud Storage 存储桶的服务账号

您可以使用服务账号和密钥文件访问 Cloud Storage。您可以使用此服务账号启用将集群快照自动上传到 Cloud Storage 存储桶的功能,或从 Cloud Storage 存储桶导入虚拟机 (VM) 映像以用于 VM Runtime on GDC。

如需创建服务账号和密钥文件,请完成以下步骤:

  1. 确保您位于 baremetal 目录中。

  2. 如果您尚未登录 Google Cloud CLI,请登录:

    gcloud auth login
    
  3. 在您的 Google Cloud 项目中启用 Cloud Storage API (storage.googleapis.com)(如果尚未启用):

    gcloud services enable --project=PROJECT_ID \
        storage.googleapis.com
    
  4. 创建一个您的集群可用于访问 Cloud Storage 存储桶的服务账号:

    gcloud iam service-accounts create SA_NAME \
        --project=PROJECT_ID
    

    SA_NAME 替换为新服务账号的名称。此服务账号名称将显示在创建过程中预配的电子邮件地址中,格式为 SA_NAME@PROJECT_ID.iam.gserviceaccount.com

  5. 创建具有以下权限的自定义角色:

    • storage.buckets.create
    • storage.buckets.get
    • storage.buckets.list
    • storage.objects.create
    • resourcemanager.projects.get
    gcloud iam roles create ROLE_ID \
        --permissions=storage.buckets.create,storage.buckets.get,storage.buckets.list,storage.objects.create \
        --project=PROJECT_ID
    

    ROLE_ID 替换为新的自定义角色的名称,例如 snapshotUpload。此自定义角色的完整路径格式为 projects/PROJECT_ID/roles/ROLE_ID

  6. 向服务账号添加政策绑定:

    gcloud iam service-accounts add-iam-policy-binding SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role='projects/PROJECT_ID/roles/ROLE_ID'
    
  7. 下载服务账号 JSON 密钥文件:

    gcloud iam service-accounts keys create OUTPUT_FILE \
        --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

如需详细了解如何创建集群快照并将其自动上传到 Cloud Storage 存储桶,请参阅创建快照以帮助诊断集群问题

如需详细了解如何从 Cloud Storage 导入虚拟机映像,请参阅创建并使用凭据从 Cloud Storage for VM Runtime on GDC