设置 Google Cloud 资源

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

准备工作

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

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

    角色 Purpose
    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 以及舰队功能,例如 Anthos 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 \
        connectgateway.googleapis.com \
        container.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        gkeonprem.googleapis.com \
        iam.googleapis.com \
        logging.googleapis.com \
        monitoring.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        kubernetesmetadata.googleapis.com \
        storage.googleapis.com
    
    
  1. 如需查看项目中启用了哪些 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 角色的服务帐号。

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

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

服务账号 Purpose 角色
anthos-baremetal-gcr Google Distributed Cloud 使用此服务帐号从 Container Registry 下载容器映像。
anthos-baremetal-connect Connect Agent 使用此服务帐号来维护集群与 Google Cloud 之间的连接。这样即可访问集群和工作负载管理功能,包括 Google Cloud 控制台和连接网关,以便与集群进行交互。 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) 映像,以便在 GDC 上使用 VM Runtime。

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

  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 导入映像以用于 GDC 上的 VM Runtime