设置 Google Cloud 资源

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

准备工作

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

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

    角色 目的
    roles/compute.viewer 必需:在 bmctl 验证集群配置文件中的 clusterOperations.location 字段时需要。
    roles/iam.serviceAccountAdmin 必需:创建 GKE on Bare Metal 所需的服务帐号时需要用到它。
    roles/iam.securityAdmin 必需:向 GKE on Bare Metal 所需的服务帐号授予 IAM 角色时,需要此权限。
    roles/iam.serviceAccountKeyAdmin 必需:在为 GKE on Bare Metal 所需的服务帐号创建 JSON 密钥文件时,需要此权限。
    roles/serviceusage.serviceUsageAdmin 必需:需要启用 GKE on Bare Metal 所需的 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。GKE on Bare Metal 在创建集群时使用 API。您还需要使用这些 API 来保持与 Google Cloud 的连接。通过与 Google Cloud 的连接,GKE on Bare Metal 可以使用 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 \
        storage.googleapis.com
    
  1. 如需查看项目中启用了哪些 API 和服务,请运行以下命令:

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

配置服务账号

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

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

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

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

服务账号 Purpose 角色
anthos-baremetal-gcr GKE on Bare Metal 使用此服务帐号从 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

手动配置服务账号

如果您愿意,可以手动创建服务账号,为其配置必要的角色,并在创建集群之前下载 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"
    
  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 上的虚拟机运行时结合使用。

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

  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 导入虚拟机映像,请参阅为 GDC 上的 VM Runtime 创建和使用凭据以从 Cloud Storage 导入映像