本页面介绍了您在创建集群之前需要创建和配置的 Google Cloud 资源。
准备工作
创建 Google Cloud 项目和结算账号。
如果您不是 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,请运行以下命令:
登录 Google Cloud CLI:
gcloud auth login
启用以下 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
如需查看项目中启用了哪些 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 Logging 和 Cloud 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
创建引导集群时指定密钥文件。
要创建服务账号和密钥文件,请执行以下操作:
在管理员工作站上,确保当前目录是
baremetal
目录。如果您尚未登录 Google Cloud CLI,请登录:
gcloud auth login
创建服务账号:
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
向服务账号授予所需的 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"
下载服务账号 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。
如需创建服务账号和密钥文件,请完成以下步骤:
确保您位于
baremetal
目录中。如果您尚未登录 Google Cloud CLI,请登录:
gcloud auth login
在您的 Google Cloud 项目中启用 Cloud Storage API (
storage.googleapis.com
)(如果尚未启用):gcloud services enable --project=PROJECT_ID \ storage.googleapis.com
创建一个您的集群可用于访问 Cloud Storage 存储桶的服务账号:
gcloud iam service-accounts create SA_NAME \ --project=PROJECT_ID
将
SA_NAME
替换为新服务账号的名称。此服务账号名称将显示在创建过程中预配的电子邮件地址中,格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
。创建具有以下权限的自定义角色:
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
。向服务账号添加政策绑定:
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'
下载服务账号 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。