事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
必要的角色
如要取得管理 IAM 服務帳戶和角色所需的權限,請要求管理員授予下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
授予 GKE 的最低必要角色
GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少須具備專案的 Kubernetes Engine 預設節點服務帳戶 (roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用專案中自動建立的 Compute Engine 預設服務帳戶做為節點服務帳戶。
如果貴機構強制執行iam.automaticIamGrantsForDefaultServiceAccounts機構政策限制,專案中的預設 Compute Engine 服務帳戶可能不會自動取得 GKE 的必要權限。
以下各節說明如何將 roles/container.defaultNodeServiceAccount 角色授予預設的 Compute Engine 服務帳戶,或是您建立的新自訂服務帳戶。
設定預設的 Compute Engine 服務帳戶
如要將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶,請完成下列步驟:
控制台
- 前往「歡迎」頁面:
- 在「專案編號」欄位中,按一下「複製到剪貼簿」圖示 。
- 前往「IAM」(身分與存取權管理) 頁面:
- 點按「 Grant access」(授予存取權)。
- 在「New principals」(新增主體) 欄位中,指定下列值:
將PROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBER替換為您複製的專案編號。 - 在「Select a role」(選取角色) 選單中,選取「Kubernetes Engine Default Node Service Account」(Kubernetes Engine 預設節點服務帳戶) 角色。
- 按一下 [儲存]。
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 服務帳戶所需角色,請完成下列步驟:
控制台
- 前往「Service accounts」(服務帳戶) 頁面:
- 按一下 「建立服務帳戶」。
- 輸入服務帳戶名稱。系統會根據名稱,在「服務帳戶 ID」欄位中自動產生服務帳戶的專屬 ID。
- 按一下「建立並繼續」。
- 在「Select a role」(選取角色) 選單中,選取「Kubernetes Engine Default Node Service Account」(Kubernetes Engine 預設節點服務帳戶) 角色。
- 按一下 [完成]。
gcloud
- 建立服務帳戶:
gcloud iam service-accounts create SA_NAME
將
SA_NAME替換為可識別服務帳戶的專屬名稱。 - 將 Kubernetes Engine 預設節點服務帳戶 (
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 角色:
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
- 如要建立服務帳戶,請以
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 資源,請將自訂服務帳戶的「服務帳戶使用者」(roles/iam.serviceAccountUser) 角色授予該主體。如要授予這個角色,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面:
在資源選取器中,選擇包含自訂服務帳戶的專案。
勾選您建立的自訂服務帳戶核取方塊,即可搭配 GKE 節點使用。
按一下「管理存取權」。 「管理存取權」窗格隨即開啟。
按一下「新增主體」。 「授予存取權」窗格隨即開啟。
在「New principals」(新增主體) 欄位中,指定主體,例如管理員群組。
在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Account User」(服務帳戶使用者) 角色。
按一下 [儲存]。「授予存取權」窗格會關閉。
關閉「管理存取權」窗格。
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:主體 ID,例如user:baklavainthebalkans@example.com。
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
在服務帳戶中套用 iam.serviceAccountUser 角色。以 policy-service-account-user.yaml 格式下載以下資源。將 [SA_NAME] 和 [PROJECT_ID] 改成您自己的資訊。
kubectl apply -f policy-service-account-user.yaml
在服務帳戶上授予角色後,這些主體就能使用該服務帳戶建立叢集和節點集區。詳情請參閱下列文件:
設定跨專案服務帳戶使用情形
如果節點服務帳戶與叢集不在同一個專案中,叢集專案中的服務代理程式需要服務帳戶的額外權限。詳情請參閱「節點服務帳戶和專案服務代理程式」。
如要授予節點服務帳戶必要角色 (不在叢集專案中),請按照下列步驟操作:
- 如要啟用跨專案服務帳戶附加功能,請更新機構政策。
如要將自訂服務帳戶的必要角色授予叢集專案中的服務代理程式,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
勾選您建立的自訂服務帳戶核取方塊,即可搭配 GKE 節點使用。
按一下「管理存取權」。 「管理存取權」窗格隨即開啟。
在叢集專案中,將「Service Account Token Creator」角色授予 Compute Engine 服務代理人:
- 在「管理存取權」窗格中,按一下 「新增主體」。「授予存取權」窗格隨即開啟。
在「New principals」(新增主體) 欄位中,指定叢集專案中 Compute Engine 服務代理人的電子郵件地址:
service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com將
CLUSTER_PROJECT_NUMBER替換為叢集專案的專案編號。在「Select a role」(選取角色) 選單中,選取「Service Account Token Creator」(服務帳戶憑證建立者) 角色。
按一下 [儲存]。「授予存取權」窗格就會關閉。
在叢集專案中,將服務帳戶使用者角色授予 GKE 服務代理程式:
- 在「管理存取權」窗格中,按一下 「新增主體」。「授予存取權」窗格隨即開啟。
在「New principals」(新增主體) 欄位中,指定叢集專案中 GKE 服務代理程式的電子郵件地址:
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com在「Select a role」(選取角色) 選單中,選取「Service Account User」(服務帳戶使用者) 角色。
按一下 [儲存]。「授予存取權」窗格會關閉。
關閉「管理存取權」窗格。
gcloud
取得叢集專案的專案編號:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'將
CLUSTER_PROJECT_ID替換為叢集專案的專案 ID。輸出內容類似
123456789。在叢集專案中,將自訂服務帳戶的
roles/iam.serviceAccountTokenCreator角色授予 Compute Engine 服務代理人: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:叢集專案的專案編號。
在叢集專案中,將自訂服務帳戶的
roles/iam.serviceAccountUser角色授予 GKE 服務代理程式: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 控制台的「Repositories」頁面。
選取存放區的核取方塊。
按一下「顯示資訊面板」。存放區資訊窗格隨即開啟。
在「權限」分頁中,按一下 「新增主體」。「授予存取權」窗格隨即開啟。
在「新增主體」欄位中,指定節點服務帳戶的電子郵件地址。
按一下「請選擇角色」,開啟角色選取對話方塊。
選取「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。
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
將下列資訊清單儲存為
policy-artifact-registry-reader.yaml:更改下列內容:
- SA_NAME:IAM 服務帳戶的名稱。
- PROJECT_ID:您的 Google Cloud 專案 ID。
- REPOSITORY_NAME:Artifact Registry 存放區的名稱。
將 Artifact Registry 讀取者角色指派給服務帳戶:
kubectl apply -f policy-artifact-registry-reader.yaml