自行設定專案和 GKE 叢集

使用 asmcli 安裝 Cloud Service Mesh 時,如果加入 --enable_all 標記或更精細的啟用標記,系統可以為您設定專案和 GKE on 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 控制台的「資訊主頁」頁面。

      前往「資訊主頁」頁面

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

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

  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 使用 Services UI 時必須提供。 否
    opsconfigmonitoring.googleapis.com 必須選取,才能在非Google Cloud 叢集使用服務 UI。 否
    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 label。如果叢集含有您要保留的現有標籤,新增 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. 初始化專案,準備安裝。這個指令會建立服務帳戶,讓資料平面元件 (例如 Sidecar 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 進行新安裝作業。

後續步驟