本页面介绍了您在创建集群之前需要创建和配置的 Google Cloud 资源。
须知事项
创建 Google Cloud 项目和结算账号。
如果您不是 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,请运行以下命令:
登录 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 \ 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 和端点的列表以及其访问理由,请参阅在代理后方安装。
如需查看项目中启用了哪些 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 使用此服务账号从 Container 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 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) 映像以用于 VM Runtime on GDC。
如需创建服务账号和密钥文件,请完成以下步骤:
确保您位于
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 for VM Runtime on GDC。