解除安裝代管 Cloud Service Mesh

本頁說明如何解除安裝代管 Cloud Service Mesh。如要解除安裝叢集內 Cloud Service Mesh,請改為按照叢集內解除安裝指南操作。

如果您使用舊版設定,並佈建多個控制層,按照這些操作說明移除所有佈建的控制層。

系統不支援解除安裝 asmcli 管理的控制層,但支援解除安裝具有 asmcli --managed 或網格 API 管理控制層的叢集。如果不確定控制層,請執行下列指令:

kubectl get controlplanerevisions -n istio-system -l 'app.kubernetes.io/created-by!=asmcli'

如果輸出內容中列出任何項目,系統就會支援解除安裝。

解除安裝 Cloud Service Mesh

使用下列指令解除安裝所有 Cloud Service Mesh 元件。

  1. 為避免應用程式流量中斷:

    • 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
    • 移除可能封鎖流量的 AuthorizationPolicy。
  2. 如果其他叢集在您要解除安裝的叢集上執行端點探索,請停用多叢集。

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. 找出需要清除的祕密,然後刪除:

    kubectl get secrets -n istio-system -l istio/multiCluster=true
    
    kubectl delete secret SECRET_NAME
    

    其中 SECRET_NAME 是密鑰的名稱。針對列出的每個密鑰重複執行這個步驟。

  4. 如果已啟用,請在命名空間中停用補充資訊自動插入功能。執行下列指令,顯示命名空間標籤:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    輸出結果會與下列內容相似:

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    1. 如果輸出內容的 LABELS 欄下方顯示 istio.io/rev=,請移除該項目:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. 如果輸出內容的 LABELS 欄下方顯示 istio-injection,請移除該項目:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. 如果沒有看到 istio.io/revistio-injection 標籤,表示命名空間未啟用自動插入功能。

  5. 重新啟動已注入 Sidecar 的工作負載,移除 Proxy。

  6. 確認沒有任何 Proxy 連線至受管理控制層:

      kubectl get pods --all-namespaces -o json | jq -r '
      .items[] |
      select(
         .spec.containers[].env[]? |
         select(.name == "PROXY_CONFIG" and (.value | contains("\"discoveryAddress\":\"meshconfig.googleapis.com:443\"")))
      ) |
      "\(.metadata.namespace)\t\(.metadata.name)"
      '
    
  7. 將網狀架構功能成員資格規格管理更新為 not-installed

     gcloud alpha container fleet mesh update \
       --project FLEET_PROJECT_ID \
       --memberships MEMBERSHIP_NAME \
       --location MEMBERSHIP_LOCATION \
       --management not-installed
    

    更改下列內容:

    • MEMBERSHIP_NAME 是您確認叢集已註冊至機群時列出的成員名稱。
    • MEMBERSHIP_LOCATION 是會員方案的適用地區 (可以是區域或 global)。
  8. 確認控制層狀態的網格功能成員狀態為 DISABLED

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    輸出內容類似如下:

     servicemesh:
       controlPlaneManagement:
         details:
         - code: DISABLED
           details: Control Plane Management is not enabled.
         state: DISABLED
       dataPlaneManagement:
         details:
         - code: DISABLED
           details: Data Plane Management is not enabled.
         state: DISABLED
     state:
       description: 'Please see https://cloud.google.com/service-mesh/docs/install for instructions to onboard to Anthos Service Mesh.'
    ...
    

    如果控制層狀態為 DEPROVISIONING,請稍待幾分鐘後再查看。

    1. 如果控制層狀態為 STALLED,則由於內部錯誤情況,系統會禁止執行解除安裝作業。如果問題仍未解決,請與支援團隊聯絡
  9. (選用) 移除 Istio CR、Istio CRD、istio-(修訂版本) configmap、asm-options configmap 和 istio-system 命名空間,從叢集移除服務網格,或在其他與 Istio API 相容的服務網格中使用這些項目。

    1. 移除 Istio CR:

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. 移除 Istio CRD:

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. 移除 istio-(修訂版本) configmap。如果刪除 istio-system 命名空間,可以略過這個步驟。

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      RELEASE_CHANNEL 替換為您的發布管道 (asm-managedasm-managed-stableasm-managed-rapid)。

    4. 移除 asm-options configmap:

      kubectl delete configmap asm-options -n istio-system
      
    5. 移除 istio-system 命名空間:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. 確認刪除作業是否成功:

      kubectl get ns
      

      輸出內容應會指出 Terminating 狀態,並如以下所示傳回,否則您可能必須手動刪除命名空間中剩餘的資源,然後再試一次。

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. 如果您使用憑證授權單位服務,請清除為受管理 Cloud Service Mesh 設定憑證授權單位服務時建立的權限和 CA 集區。

  11. 如果您已啟用受管理 Cloud Service Mesh 機群預設設定,並想為日後的叢集停用這項設定,請停用這項設定。如果只從單一叢集解除安裝,可以略過這個步驟。

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

    其中 FLEET_PROJECT_ID 是車隊主專案的 ID。

  12. 如要在機群層級停止使用 Cloud Service Mesh,請停用機群主專案的服務網格功能。

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    其中 FLEET_PROJECT_ID 是車隊主專案的 ID。

完成這些步驟後,系統會從叢集中移除所有 Cloud Service Mesh 元件,包括 Proxy、憑證授權單位,以及 RBAC 角色和繫結。安裝過程中,系統會授予 Google 擁有的服務帳戶必要權限,在叢集內建立服務網格資源。這些解除安裝操作說明不會撤銷這些權限,因此日後可順利重新啟用 Cloud Service Mesh。