准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
所需的角色
如需获得管理 IAM 服务账号和角色所需的权限,请让管理员向您授予以下 IAM 角色:
-
集群项目的 Security Admin (
roles/iam.securityAdmin) -
在单独的项目中配置服务账号:
服务账号项目的 Security Admin (
roles/iam.securityAdmin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
授予 GKE 所需的最低角色
GKE 使用关联到节点的 IAM 服务账号来运行日志记录和监控等系统任务。这些节点服务账号必须至少拥有项目的 Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) 角色。默认情况下,GKE 会将 Compute Engine 默认服务账号(在您的项目中自动创建)用作节点服务账号。
如果您的组织强制执行 iam.automaticIamGrantsForDefaultServiceAccounts 组织政策限制,则项目中的默认 Compute Engine 服务账号可能无法自动获得 GKE 所需的权限。
以下部分介绍了如何向默认 Compute Engine 服务账号或您创建的新自定义服务账号授予 roles/container.defaultNodeServiceAccount 角色。
配置默认的 Compute Engine 服务账号
如需向 Compute Engine 默认服务账号授予 roles/container.defaultNodeServiceAccount 角色,请完成以下步骤:
控制台
gcloud
- 找到您的 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
将
PROJECT_ID替换为您的项目 ID。输出内容类似如下:
12345678901
- 将
roles/container.defaultNodeServiceAccount角色授予 Compute Engine 默认服务账号:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
将
PROJECT_NUMBER替换为上一步中的项目编号。
配置自定义节点服务账号
如需创建自定义服务账号并向其授予 GKE 所需的角色,请完成以下步骤:
控制台
- 转到服务账号页面:
- 点击 创建服务账号。
- 输入服务账号的名称。 服务账号 ID 字段会根据名称自动生成服务账号的唯一 ID。
- 点击创建并继续。
- 在选择角色菜单中,选择 Kubernetes Engine Default Node Service Account 角色。
- 点击完成。
gcloud
- 创建服务账号:
gcloud iam service-accounts create SA_NAME
将
SA_NAME替换为可标识服务账号的唯一名称。 - 向服务账号授予 Kubernetes Engine Default Node Service Account (
roles/container.defaultNodeServiceAccount) 角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/container.defaultNodeServiceAccount
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。SA_NAME:您创建的服务账号的名称。
Terraform
创建 IAM 服务账号并向其授予项目的 roles/container.defaultNodeServiceAccount 角色:
Config Connector
注意:此步骤需要使用 Config Connector。按照安装说明在您的集群上安装配置连接器。
- 如需创建服务账号,请下载以下资源并将其保存为
service-account.yaml:替换以下内容:
[SA_NAME]:新服务账号的名称。[DISPLAY_NAME]:服务账号的显示名称。
- 创建服务账号:
kubectl apply -f service-account.yaml
- 将
roles/logging.logWriter角色应用到服务账号:- 下载以下资源并将其保存为
policy-logging.yaml。替换以下内容:
- 将
[SA_NAME]替换为服务账号的名称。 [PROJECT_ID]:您的 Google Cloud 项目 ID。
- 将
- 将角色应用到服务账号:
kubectl apply -f policy-logging.yaml
- 下载以下资源并将其保存为
- 将
roles/monitoring.metricWriter角色应用到服务账号:- 下载以下资源并将其保存为
policy-metrics-writer.yaml。将[SA_NAME]和[PROJECT_ID]替换为您自己的信息。替换以下内容:
- 将
[SA_NAME]替换为服务账号的名称。 [PROJECT_ID]:您的 Google Cloud 项目 ID。
- 将
- 将角色应用到服务账号:
kubectl apply -f policy-metrics-writer.yaml
- 下载以下资源并将其保存为
- 将
roles/monitoring.viewer角色应用到服务账号:- 下载以下资源并将其保存为
policy-monitoring.yaml。替换以下内容:
- 将
[SA_NAME]替换为服务账号的名称。 [PROJECT_ID]:您的 Google Cloud 项目 ID。
- 将
- 将角色应用到服务账号:
kubectl apply -f policy-monitoring.yaml
- 下载以下资源并将其保存为
- 将
roles/autoscaling.metricsWriter角色应用到服务账号:- 下载以下资源并将其保存为
policy-autoscaling-metrics-writer.yaml。替换以下内容:
- 将
[SA_NAME]替换为服务账号的名称。 [PROJECT_ID]:您的 Google Cloud 项目 ID。
- 将
- 将角色应用到服务账号:
kubectl apply -f policy-autoscaling-metrics-writer.yaml
- 下载以下资源并将其保存为
您还可以使用此服务账号处理其他项目中的资源。如需查看相关说明,请参阅跨项目启用服务账号模拟功能。
允许主账号附加自定义服务账号
您可以在创建集群或节点池时附加自定义服务账号。如需允许主账号(例如平台管理员)使用自定义服务账号创建 GKE 资源,请向该主账号授予自定义服务账号的 Service Account User (roles/iam.serviceAccountUser) 角色。如需授予此角色,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往服务账号页面:
在资源选择器中,选择包含您的自定义服务账号的项目。
选中您创建的要与 GKE 节点搭配使用的自定义服务账号对应的复选框。
点击 管理访问权限。 系统会打开管理访问权限窗格。
点击 添加主账号。 此时会打开授予访问权限窗格。
在新的主账号字段中,指定主账号,例如管理员群组。
在选择角色下拉菜单中,选择服务账号用户角色。
点击保存。授予访问权限窗格随即会关闭。
关闭管理访问权限窗格。
gcloud
授予 roles/iam.serviceAccountUser 角色:
gcloud iam service-accounts add-iam-policy-binding \
SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
--member=PRINCIPAL \
--role=roles/iam.serviceAccountUser
替换以下内容:
SA_NAME:自定义服务账号的名称。SERVICE_ACCOUNT_PROJECT_ID:包含自定义服务账号的项目 ID。PRINCIPAL:主账号标识符,例如user:baklavainthebalkans@example.com。
Config Connector
注意:此步骤需要使用 Config Connector。按照安装说明在您的集群上安装 Config Connector。
将 iam.serviceAccountUser 角色应用到您的服务账号。下载以下资源并将其保存为 policy-service-account-user.yaml。将 [SA_NAME] 和 [PROJECT_ID] 替换为您自己的信息。
kubectl apply -f policy-service-account-user.yaml
向服务账号授予角色后,相应的主账号便可以使用该服务账号来创建集群和节点池。如需了解详情,请参阅以下文档:
配置服务账号跨项目使用
如果节点服务账号与集群不在同一项目中,则集群项目中的服务代理需要对该服务账号拥有额外的权限。如需了解详情,请参阅节点服务账号和项目服务代理。
如需向不在集群项目中的节点服务账号授予所需角色,请按以下步骤操作:
- 如需启用跨项目服务账号关联,请更新组织政策。
如需向集群项目中的服务代理授予自定义服务账号的所需角色,请选择以下任一选项:
控制台
在 Google Cloud 控制台中,打开服务账号页面。
选中您创建的要与 GKE 节点搭配使用的自定义服务账号对应的复选框。
点击 管理访问权限。 系统会打开管理访问权限窗格。
向集群项目中的 Compute Engine 服务代理授予 Service Account Token Creator 角色:
- 在管理访问权限窗格中,点击 添加主账号。 授予访问权限窗格随即会打开。
在新的主账号字段中,指定集群项目中的 Compute Engine 服务代理的电子邮件地址:
service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com将
CLUSTER_PROJECT_NUMBER替换为集群项目的项目编号。在选择角色菜单中,选择 Service Account Token Creator 角色。
点击保存。授予访问权限窗格随即会关闭。
向集群项目中的 GKE 服务代理授予 Service Account User 角色:
- 在管理访问权限窗格中,点击 添加主账号。 授予访问权限窗格随即会打开。
在新的主账号字段中,指定集群项目中 GKE 服务代理的电子邮件地址:
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com在选择角色菜单中,选择 Service Account User 角色。
点击保存。授予访问权限窗格随即会关闭。
关闭管理访问权限窗格。
gcloud
获取集群项目的项目编号:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'将
CLUSTER_PROJECT_ID替换为集群项目的项目 ID。输出类似于
123456789。向集群项目中的 Compute Engine 服务代理授予自定义服务账号的
roles/iam.serviceAccountTokenCreator角色:gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator替换以下内容:
SA_NAME:自定义服务账号的名称。SERVICE_ACCOUNT_PROJECT_ID:包含您的自定义服务账号的项目的项目 ID。CLUSTER_PROJECT_NUMBER:集群项目的项目编号。
向集群项目中的 GKE 服务代理授予对自定义服务账号的
roles/iam.serviceAccountUser角色:gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
允许从私有代码库拉取映像
如果您在私有 Artifact Registry 代码库中存储了映像,则必须向节点服务账号授予对这些代码库的访问权限。即使您使用默认的 Compute Engine 服务账号,如果代码库位于其他项目中,您可能也需要向该服务账号授予对代码库的访问权限。
如需从 Artifact Registry 拉取私有映像,请向您的节点服务账号授予代码库的 Artifact Registry Reader 角色 (roles/artifactregistry.reader)。
控制台
在 Google Cloud 控制台中,前往制品库页面。
选中您的代码库所对应的复选框。
点击显示信息面板。系统会打开代码库信息窗格。
在权限标签页中,点击 添加主账号。系统随即会打开授予访问权限窗格。
在新的主账号字段中,指定节点服务账号的电子邮件地址。
点击选择角色以打开角色选择对话框。
选择 Artifact Registry Reader 角色。
点击保存。
gcloud
授予对代码库的 roles/artifactregistry.reader 角色:
gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \
--member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
--project=REPOSITORY_PROJECT_ID \
--role=roles/artifactregistry.reader
替换以下内容:
REPOSITORY_NAME:Artifact Registry 代码库的名称。SERVICE_ACCOUNT_EMAIL:节点服务账号的电子邮件地址。REPOSITORY_PROJECT_ID:包含代码库的项目的项目 ID。
Config Connector
注意:此步骤需要使用 Config Connector。按照安装说明在您的集群上安装 Config Connector。
将以下清单保存为
policy-artifact-registry-reader.yaml:替换以下内容:
- SA_NAME:您的 IAM 服务账号的名称。
- PROJECT_ID:您的 Google Cloud 项目 ID。
- REPOSITORY_NAME:您的 Artifact Registry 代码库的名称。
向服务账号授予 Artifact Registry Reader 角色:
kubectl apply -f policy-artifact-registry-reader.yaml