設定 Google Cloud 資源

本頁說明建立叢集前需要建立及設定的 Google Cloud 資源。

事前準備

  1. 建立專案 Google Cloud 帳單帳戶

  2. 如果您不是 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,請執行下列指令:

  1. 登入 Google Cloud CLI:

    gcloud auth login
    
  2. 啟用下列 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.com
    • kubernetesmetadata.googleapis.com

    如果叢集是透過 Proxy 安裝,您必須將許多這類 API 加入允許連線的清單。如需必須加入許可清單的 API 和端點清單,以及存取這些項目的理由,請參閱「透過 Proxy 安裝 」。

  3. 如要查看專案中已啟用的 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 會使用這個服務帳戶,從 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 LoggingCloud 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 建立啟動程序叢集時,可以指定金鑰檔案

如要建立服務帳戶和金鑰檔案,請按照下列步驟操作:

  1. 在管理工作站上,確認您位於 baremetal 目錄。

  2. 如果尚未登入 Google Cloud CLI,請登入:

    gcloud auth login
    
  3. 建立服務帳戶:

    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
    
  4. 授予服務帳戶必要的身分與存取權管理角色:

    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"
    
  5. 下載服務帳戶 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) 映像檔,以搭配 GDC 上的 VM Runtime 使用。

如要建立服務帳戶和金鑰檔案,請完成下列步驟:

  1. 確認您位於 baremetal 目錄。

  2. 如果尚未登入 Google Cloud CLI,請登入:

    gcloud auth login
    
  3. 如果尚未啟用 Cloud Storage API,請在專案中啟用storage.googleapis.com: Google Cloud

    gcloud services enable --project=PROJECT_ID \
        storage.googleapis.com
    
  4. 建立叢集可存取 Cloud Storage 值區的服務帳戶:

    gcloud iam service-accounts create SA_NAME \
        --project=PROJECT_ID
    

    SA_NAME 替換為新服務帳戶的名稱。這個服務帳戶名稱會出現在建立期間佈建的電子郵件地址中,格式為 SA_NAME@PROJECT_ID.iam.gserviceaccount.com

  5. 建立具有下列權限的自訂角色:

    • 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

  6. 為服務帳戶新增政策繫結:

    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'
    
  7. 下載服務帳戶的 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 匯入映像檔,供 GDC 上的 VM 執行階段使用