服务帐号和密钥

本页面介绍了安装 GKE On-Prem 所需的 Google Cloud 服务帐号和密钥。

服务帐号概览

在安装 GKE On-Prem 之前,您需要拥有以下服务帐号:

  • 已列入许可名单的服务帐号
  • 连接和注册服务帐号
  • 连接和代理服务帐号
  • 日志记录和监控服务帐号

根据您要启用的功能,您可能还需要有一些可选服务帐号

了解服务帐号和 Google Cloud 项目

创建服务帐号时,您需要在 Google Cloud 项目中创建该帐号。创建服务账号的 Google Cloud 项目称为服务账号的父项目。该服务帐号是其父项目的成员。

您可以通过查看服务帐号的电子邮件地址来确定服务帐号的父项目。例如,以下是名为 logger 的服务帐号的电子邮件地址。父项目为 alice-123

logger@alice-123.iam.gserviceaccount.com

向服务账号授予 Identity and Access Management (IAM) 角色时,您会将该角色授予特定 Google Cloud 项目上的该服务账号。这遵循向资源上的身份授予角色的一般模式。

例如,您可以将 bigquery.dataEditor 角色授予 bob-456 项目上的 logger@alice-123.iam.gserviceaccount.com 服务帐号。在这种情况下,服务帐号是身份,Google Cloud 项目是资源。

请务必了解,您可以向不是服务帐号父项目的项目中的服务帐号授予角色。

已列入许可名单的服务帐号

您已经拥有一个已列入许可名单的服务帐号

如果您尚未为列入许可名单的服务帐号创建 JSON 密钥文件,请立即创建一个:

gcloud iam service-accounts keys create whitelisted-key.json \
   --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]

其中,[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL] 是已列入许可名单的服务帐号的电子邮件地址。

向已列入许可名单的服务帐号授予角色

GKE On-Prem 配置文件包含多个指定 Google Cloud 项目 ID 的字段。

usercluster:
  usagemetering:
    bigqueryprojectid: ""
...
gkeconnect:
  projectid: ""
...
stackdriver:
  projectid: ""
...
cloudauditlogging:
  projectid: ""

GKE On-Prem 配置文件中的项目 ID 不必不同。例如,gkeconnect.projectid 可以与 stackdriver.projectid 相同。实际上,配置文件中的所有项目 ID 都可能相同。

您已列入许可名单的服务帐号必须在 GKE On-Prem 配置文件中指定的每个项目获得以下 IAM 角色

  • serviceusage.serviceUsageViewer
  • iam.serviceAccountCreator
  • iam.roleViewer

如果您使用 gkeadm 创建管理员工作站,则 gkeadm 会将您 GKE On-Prem 配置文件中的以下字段设置为您列入许可名单的服务帐号的父项目的 ID。

  • gkeconnect.projectid
  • stackdriver.projectid

此外,gkeadm 在您列入许可名单的服务帐号的父项目中已为您列入许可名单的服务帐号授予所需的角色。

如果您未使用 gkeadm 创建管理员工作站,则必须自行授予角色。

对于在 GKE On-Prem 配置文件中指定的每个项目,请向您列入许可名单的服务帐号授予所需的角色:

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.serviceAccountCreator"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.roleViewer"

其中,[PROJECT_ID] 是您在 GKE On-Prem 配置文件中指定的其中一个项目的 ID。

其他所需的服务帐号

回想一下,除了已列入许可名单的服务帐号之外,您还需要以下服务帐号:

  • 连接和注册服务帐号
  • 连接和代理服务帐号
  • 日志记录和监控服务帐号

根据您创建管理员工作站的方式,您可能已经拥有这些服务帐号。

案例 1:gkeadm 为您创建了服务帐号。

如果您使用 gkeadm 创建管理员工作站并传递了 --auto-create-service-accounts 标志,则 gkeadm 为您执行了以下操作:

  • 创建了一个连接和注册服务帐号。向连接和注册服务帐号授予了相应的 IAM 角色。为连接和注册服务帐号创建了 JSON 密钥文件。已将 JSON 密钥文件复制到您的管理员工作站。

  • 创建了一个连接和代理服务帐号。向连接和代理服务帐号授予了相应的 IAM 角色。为连接和代理服务帐号创建了 JSON 密钥文件。已将 JSON 密钥文件复制到您的管理员工作站。

  • 创建了日志记录和监控服务帐号。向日志记录和监控服务帐号授予了相应的 IAM 角色。为日志记录和监控服务帐号创建了 JSON 密钥文件。已将 JSON 密钥文件复制到您的管理员工作站。

gkeadm 为您创建服务账号时,它会在 Google Cloud 项目(已列入许可名单的服务账号的父项目)中创建账号。此外,gkeadm 会向同一项目上的服务帐号授予角色。如需了解如何使用多个 Google Cloud 项目,请参阅使用多个 Google Cloud 项目

案例 2:gkeadm 没有为您创建服务帐号。

如果您没有将 gkeadm--auto-create-service-accounts 标志搭配使用来创建管理员工作站,则必须创建您自己的服务帐号。此外,对于每个服务帐号,您必须创建一个 JSON 密钥文件并授予相应的 IAM 角色。

创建您自己的服务帐号

如果您已经拥有案例 1 中所述的服务帐号,则可以跳过此部分。

本部分介绍如何创建您在安装和使用 GKE On-Prem 时所需的服务帐号。本部分还介绍了如何为您的服务帐号创建 JSON 密钥文件,以及如何向您的服务帐号授予相应的 IAM 角色。

连接和注册服务帐号

Connect 使用此服务帐号向 Google Cloud 注册您的 GKE On-Prem 集群。

创建您的连接和注册服务帐号:

gcloud iam service-accounts create connect-register-svc-account --project [PARENT_PROJECT_ID]

其中,[PARENT_PROJECT_ID] 是要作为连接和注册服务帐号的父项目的 ID。

为连接和注册服务帐号创建密钥:

gcloud iam service-accounts keys create connect-register-key.json \
   --iam-account [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]

其中,[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL] 是您的连接和注册服务帐号的电子邮件地址。

gkehub.admin 角色授予您的连接和注册服务帐号:

gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \
--member "serviceAccount:[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/gkehub.admin"

此处的 [CONNECT_PROJECT_ID] 是您的连接项目的 ID。 这是您要在其中注册并维护与 GKE On-Prem 集群的连接的项目。

连接和代理服务帐号

Connect 使用此服务帐号来维护 GKE On-Prem 与 Google Cloud 之间的连接。

创建连接和代理服务帐号:

gcloud iam service-accounts create connect-agent-svc-account  --project [PARENT_PROJECT_ID]

其中,[PARENT_PROJECT_ID] 是要作为连接和代理服务帐号的父项目的 ID。

为连接和代理服务帐号创建密钥:

gcloud iam service-accounts keys create connect-agent-key.json \
   --iam-account [CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]

其中,[CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL] 是您的连接和代理服务帐号的电子邮件地址。

gkehub.connect 角色授予您的连接和代理服务帐号:

gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \
--member "serviceAccount:[CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/gkehub.connect"

其中,[CONNECT_PROJECT_ID] 是您的连接项目的 ID。 这是您要在其中注册并维护与 GKE On-Prem 集群的连接的项目。

日志记录和监控服务帐号

Connect 使用此服务帐号将日志从集群导出至 Cloud Logging。

创建您的日志记录和监控服务帐号:

gcloud iam service-accounts create logging-monitoring-svc-account --project [PARENT_PROJECT_ID]

其中,[PARENT_PROJECT_ID] 是要作为日志记录和监控服务帐号的父项目的 ID。

为您的日志记录和监控服务帐号创建密钥:

gcloud iam service-accounts keys create logging-monitoring-key.json \
   --iam-account [LOG_MON_SERVICE_ACCOUNT_EMAIL]

其中,[LOG_MON_SERVICE_ACCOUNT_EMAIL] 是您的日志记录和监控服务帐号的电子邮件地址。

向日志记录和监控服务帐号授予 stackdriver.resourceMetadata.writerlogging.logWritermonitoring.metricWriter 角色:

gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/stackdriver.resourceMetadata.writer"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MON_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/monitoring.metricWriter"

其中,[LOG_MON_PROJECT_ID] 是您的日志记录和监控项目的 ID。 这是您要在其中查看 GKE On-Prem 集群日志的项目。

可选服务帐号

用量计量服务帐号

GKE 用量计量使用此服务帐号将使用情况数据存储在 BigQuery 数据集中。

如果要为集群启用 GKE 用量计量,您需要拥有一个用量计量服务帐号。gkeadm 工具不会为您创建此服务帐号,因此您必须自行创建。

创建您的用量计量服务帐号:

gcloud iam service-accounts create usage-metering-svc-account --project [PARENT_PROJECT_ID]

其中,[PARENT_PROJECT_ID] 是要作为用量计量服务帐号的父项目的 ID。

为您的用量计量服务帐号创建密钥:

gcloud iam service-accounts keys create usage-metering-key.json \
   --iam-account [USAGE_METERING_SERVICE_ACCOUNT_EMAIL]

其中,[USAGE_METERING_SERVICE_ACCOUNT_EMAIL] 是您的用量计量服务帐号的电子邮件地址。

向您的用量计量服务帐号授予 bigquery.dataEditor 角色:

gcloud projects add-iam-policy-binding [USAGE_METERING_PROJECT_ID] \
--member "serviceAccount:[USAGE_METERING_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/bigquery.dataEditor"

其中,[USAGE_METERING_PROJECT_ID] 是您的用量计量项目的 ID。 这是您要在其中查看 GKE On-Prem 集群的使用情况数据的项目。

审核日志记录服务帐号

GKE On-Prem 使用此服务帐号将集群中的 Kubernetes 审核日志发送到 Cloud Audit Logs

如果要为 GKE On-Prem 安装启用 Cloud Audit Logs,您需要拥有审核日志记录服务帐号。gkeadm 工具不会为您创建此服务帐号,因此您必须自行创建。

创建您的审核日志记录服务帐号:

gcloud iam service-accounts create audit-logging-svc-account --project [PARENT_PROJECT_ID]

其中,[PARENT_PROJECT_ID] 是要作为审核日志记录服务帐号的 Google Cloud 父项目的 ID。

为您的审核日志记录服务帐号创建密钥:

gcloud iam service-accounts keys create audit-logging-key.json \
   --iam-account [AUDIT_LOGGINGSERVICE_ACCOUNT_EMAIL]

其中,[AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL] 是您的审核日志记录服务帐号的电子邮件地址。

您无需向审核日志记录服务帐号授予任何角色。