您可以設定必要的 Google Cloud 資源,為建立叢集做好環境準備。這項設定會在部署叢集前,建立必要的服務帳戶、IAM 角色和 API。
事前準備
建立 Google Cloud 專案和帳單帳戶。
如果您不是 Google Cloud 專案擁有者,請要求專案擁有者授予您下列 Identity and Access Management (IAM) 角色:
角色 目的 roles/compute.viewer 必要: bmctl驗證叢集設定檔中的 clusterOperations.location 欄位時,需要這個值。roles/iam.serviceAccountAdmin 必要:必須建立 Google Distributed Cloud 所需的服務帳戶。 roles/iam.securityAdmin 必要:必須將 IAM 角色授予 Google Distributed Cloud 所需的服務帳戶。 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 頁面,則必須具備這項權限。 如要瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
啟用 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。只有 1.29 以上版本才需要下列兩個 API:compute.googleapis.comkubernetesmetadata.googleapis.com
如果您在 Proxy 後方安裝叢集,則必須將其中許多 API 新增至允許的連線清單。如需必須加入許可清單的 API 和端點清單,以及存取這些 API 和端點的原因,請參閱「在 Proxy 後方安裝 」。
如要查看專案中啟用了哪些 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 用戶端建立管理員叢集,根據預設,當您執行指令建立 bootstrap 叢集時,bmctl register bootstrap 指令會建立具有必要 IAM 角色的服務帳戶。
建立使用者叢集時也需要服務帳戶,但建立管理使用者叢集的管理員叢集時,系統會建立並設定服務帳戶。
下表說明自動建立的服務帳戶:
| 服務帳戶 | 目的 | 角色 |
|---|---|---|
| anthos-baremetal-gcr | Google Distributed Cloud 會使用這個服務帳戶,從 Artifact Registry 下載容器映像檔。 | 無 |
| anthos-baremetal-connect | Connect 代理程式會使用這個服務帳戶,維持叢集和 Google Cloud之間的連線。這樣就能存取叢集和工作負載管理功能,包括 Google Cloud 控制台和連結閘道,以便與叢集互動。 | roles/gkehub.connect |
| anthos-baremetal-register | Connect 代理程式會使用這個服務帳戶,向 機群註冊叢集。 | roles/gkehub.admin |
| anthos-baremetal-cloud-ops | Stackdriver 代理程式會使用這個服務帳戶,將叢集的記錄檔和指標匯出至 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 bucket 的服務帳戶
您可以使用服務帳戶和金鑰檔案存取 Cloud Storage。您可以使用這個服務帳戶,將叢集快照自動上傳至 Cloud Storage bucket,或從 Cloud Storage bucket 匯入虛擬機器 (VM) 映像檔,以便在 GDC 上與 VM Runtime 搭配使用。
如要建立服務帳戶和金鑰檔案,請完成下列步驟:
確認您位於
baremetal目錄。如果尚未登入 Google Cloud CLI,請先登入:
gcloud auth login如果尚未啟用,請在
storage.googleapis.com專案 Google Cloud 中啟用 Cloud Storage API:gcloud services enable --project=PROJECT_ID \ storage.googleapis.com建立服務帳戶,讓叢集可用來存取 Cloud Storage bucket:
gcloud iam service-accounts create SA_NAME \ --project=PROJECT_ID將
SA_NAME替換為新服務帳戶的名稱。這個服務帳戶名稱會顯示在建立時佈建的電子郵件地址中,格式為SA_NAME@PROJECT_ID.iam.gserviceaccount.com。建立具有下列權限的自訂角色:
storage.buckets.createstorage.buckets.getstorage.buckets.liststorage.objects.createresourcemanager.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 bucket,請參閱「建立快照以協助診斷叢集問題」。
如要進一步瞭解如何從 Cloud Storage 匯入 VM 映像檔,請參閱「建立及使用憑證,從 Cloud Storage 匯入 VM Runtime on GDC 的映像檔」。