自行設定專案和 GKE 叢集

<0x0 Google Cloud 詳情請參閱 Cloud Service Mesh 總覽

使用 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 必須使用 Services 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 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 進行新安裝作業。

後續步驟