自行設定專案和 GKE 叢集

使用 asmcli 安裝 Cloud Service Mesh 時,如果您加入 --enable_all 標記或更精細的啟用標記,Cloud Service Mesh 就能為您設定專案和 GKE 叢集。 Google Cloud 如果您想自行進行設定,而非由 asmcli 進行變更,請按照本頁的步驟操作。

如果您已安裝舊版 Cloud Service Mesh,則無須對專案或叢集進行任何變更,即可使用 asmcli 升級至最新的 Cloud Service Mesh 版本。

根據預設,asmcli 不會安裝 istio-ingressgateway。建議您分別部署及管理控制層和閘道。Cloud Service Mesh 支援閘道部署項目的自動插入功能,可讓您更輕鬆地升級 Cloud Service Mesh。升級 Cloud Service Mesh 後,您可以像重新啟動服務一樣重新啟動閘道,以便採用新的控制層設定。詳情請參閱「安裝及升級閘道」。

事前準備

設定專案

  1. 取得叢集建立所在專案的專案 ID 和專案編號。

    gcloud

    執行下列指令:

    gcloud projects list
    

    控制台

    1. 前往Google Cloud 控制台的「資訊主頁頁面。

      前往「Dashboard」(資訊主頁) 頁面

    2. 按一下頁面頂端的下拉式清單。在隨即顯示的「Select from」(可用的選項) 視窗中,選取所需專案。

      專案 ID 和專案編號會顯示在專案資訊主頁的「Project info」(專案資訊) 卡片中。

  2. 建立下列的環境變數:

    • 使用專案 ID 設定工作負載集區:

      export WORKLOAD_POOL=PROJECT_ID.svc.id.goog
      
    • 使用專案編號設定網格 ID:

      export MESH_ID="proj-PROJECT_NUMBER"
      
  3. 設定所需的 Identity and Access Management (IAM) 角色。如果您是專案擁有者,則具備完成安裝程序所需的所有權限。如果您不是專案擁有者,就需要由擁有者授予下列特定 IAM 角色。在以下指令中,將 PROJECT_ID 替換為上一個步驟中的專案 ID,並將 GCP_EMAIL_ADDRESS 替換為您用來登入 Google Cloud的帳戶。

    ROLES=(
    'roles/servicemanagement.admin' \
    'roles/serviceusage.serviceUsageAdmin' \
    'roles/meshconfig.admin' \
    'roles/compute.admin' \
    'roles/container.admin' \
    'roles/resourcemanager.projectIamAdmin' \
    'roles/iam.serviceAccountAdmin' \
    'roles/iam.serviceAccountKeyAdmin' \
    'roles/gkehub.admin')
    for role in "${ROLES[@]}"
    do
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "user:GCP_EMAIL_ADDRESS" \
        --role="$role"
    done
    

    如果您在執行 asmcli 時加入 --enable_all--enable_gcp_iam_roles 旗標,系統會為您設定必要的 IAM 角色。

  4. 啟用必要的 Google API:

    gcloud services enable \
        --project=PROJECT_ID \
        mesh.googleapis.com
    

    除了 mesh.googleapis.com 之外,這個指令還會啟用下列 API:

    API 目的 可停用
    meshconfig.googleapis.com Cloud Service Mesh 會使用 Mesh Configuration API,將設定資料從網格轉送至 Google Cloud。此外,啟用 Mesh Configuration API 後,您就能在 Google Cloud 控制台中存取 Cloud Service Mesh 頁面,並使用 Cloud Service Mesh 憑證授權單位。
    meshca.googleapis.com 與代管 Cloud Service Mesh 使用的 Cloud Service Mesh 憑證授權單位相關。
    container.googleapis.com 建立 Google Kubernetes Engine (GKE) 叢集時必須使用。
    gkehub.googleapis.com 必須將網格管理為機群
    monitoring.googleapis.com 必須取得這項存取權,才能擷取網格工作負載的遙測資料。
    stackdriver.googleapis.com 必須提供這項權限,才能使用服務 UI。
    opsconfigmonitoring.googleapis.com 必須使用服務 UI 才能管理離線Google Cloud 叢集。
    connectgateway.googleapis.com 這是必要的,因為這樣才能讓代管 Cloud Service Mesh 控制層存取網格工作負載。 是*
    trafficdirector.googleapis.com 啟用高可用性且可擴充的受管理控制層。 是*
    networkservices.googleapis.com 啟用高可用性且可擴充的受管理控制層。 是*
    networksecurity.googleapis.com 啟用高可用性且可擴充的受管理控制層。 是*

    啟用 API 可能需要一分鐘以上的時間才能完成。啟用 API 後,您會看到類似以下的輸出內容:

    Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished
    successfully.
    

    如果您在執行 asmcli 時加入 --enable_all--enable_apis 旗標,系統會為您啟用必要的 API。

設定叢集

如果您加入 --enable_all 標記或其他更精細的啟用標記asmcli 就會為您設定叢集。

  1. 設定 Google Cloud CLI 的預設區域或地區。如果您未在此處設定預設值,請務必在本頁的 gcloud container clusters 指令中指定 --zone--region 選項。

    • 如果您有單一區域叢集,請設定預設區域:

      gcloud config set compute/zone CLUSTER_LOCATION
      
    • 如果您有地區叢集,請設定預設地區:

      gcloud config set compute/region CLUSTER_LOCATION
      
  2. 在叢集中設定 mesh_id 標籤。如果叢集中含有您想保留的現有標籤,則必須在新增 mesh_id 標籤時一併納入這些標籤。

    1. 如要查看叢集是否已套用標籤,請按照下列步驟操作:

      gcloud container clusters describe CLUSTER_NAME \
          --project PROJECT_ID
      

      在輸出內容中尋找 resourceLabels 欄位。每個標籤都會儲存在 resourceLabels 欄位下方的獨立行中,例如:

      resourceLabels:
        csm: ''
        env: dev
        release: stable

      為了方便起見,您可以將標籤加入環境變數。在下列範例中,將 YOUR_EXISTING_LABELS 替換為以逗號分隔的現有叢集標籤清單,格式為 KEY=VALUE,例如:env=dev,release=stable

      export EXISTING_LABELS="YOUR_EXISTING_LABELS"
      
    2. 設定 mesh_id 標籤:

      • 如果叢集中含有您想保留的現有標籤,請使用 mesh_id 和現有標籤更新叢集:

        gcloud container clusters update CLUSTER_NAME \
            --project PROJECT_ID \
            --update-labels=mesh_id=${MESH_ID},${EXISTING_LABELS}
        
      • 如果叢集沒有任何現有標籤,請只使用 mesh_id 標籤更新叢集:

        gcloud container clusters update CLUSTER_NAME \
            --project=PROJECT_ID \
            --update-labels=mesh_id=${MESH_ID}
        
  3. 啟用 Workload Identity

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --workload-pool=${WORKLOAD_POOL}
    

    啟用 Workload Identity 最多可能需要 10 到 15 分鐘。

  4. 向機群註冊叢集

  5. 初始化專案,讓專案準備好進行安裝。除了其他功能外,這項指令還會建立服務帳戶,讓資料層元件 (例如附屬 Proxy) 安全存取專案的資料和資源。在下列指令中,將 FLEET_PROJECT_ID 替換為車隊主機專案

    curl --request POST  \
     --header "Authorization: Bearer $(gcloud auth print-access-token)" \
     --header "Content-Type: application/json" \
     --data '{"workloadIdentityPools":["FLEET_PROJECT_ID.hub.id.goog","FLEET_PROJECT_ID.svc.id.goog","PROJECT_ID.svc.id.goog"]}' \
     "https://meshconfig.googleapis.com/v1alpha1/projects/PROJECT_ID:initialize"
    

    指令會以空白的捲號回應:{}

  6. 啟用 GKE 中的 Cloud Monitoring 和 Cloud Logging

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --enable-stackdriver-kubernetes
    

您的專案和叢集現在已可使用 asmcli 進行新安裝作業。

後續步驟