解除安裝叢集內 Cloud Service Mesh

本頁說明如何卸除叢集內 Cloud Service Mesh (如果您使用 Istio API)。如果您使用 Compute Engine API,則無須採取任何行動。如要瞭解兩者的差異,請參閱 Cloud Service Mesh 總覽

按照這些操作說明解除安裝叢內 Cloud Service Mesh 時,系統會移除所有設定。

如要解除安裝代管 Cloud Service Mesh,請改為按照代管解除安裝指南操作。

如要從叢集內遷移至受管理,請改為按照遷移指南操作。

解除安裝 Cloud Service Mesh

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

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

    • 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
    • 移除可能封鎖流量的 AuthorizationPolicy。
  2. 如果已啟用,請在命名空間中停用 Sidecar Proxy 自動插入功能。執行下列指令,顯示命名空間標籤:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

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

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

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

     kubectl label namespace YOUR_NAMESPACE istio.io/rev-
    

    如果輸出內容的 LABELS 欄下方顯示 istio-injection,請移除該欄:

     kubectl label namespace YOUR_NAMESPACE istio-injection-
    

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

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

  4. 如果叢集中有 validatingwebhooksconfigurationmutatingwebhookconfiguration,請將其刪除:

      kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    
  5. 所有工作負載都啟動且未觀察到任何 Proxy 時,即可安全地刪除叢集內控制層,停止計費。

    如要移除叢集內控制層,請執行下列指令:

    istioctl uninstall --purge
    

    如果沒有其他控制平面,可以刪除 istio-system 命名空間,移除所有 Cloud Service Mesh 資源。否則,請刪除與 Cloud Service Mesh 修訂版本對應的服務。這樣可避免刪除共用資源,例如 CRD。

  6. (選用) 移除 Istio CR、Istio CRD、istio-(修訂版本) configmap、asm-options configmap、istio-systemasm-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 替換為發布管道

    4. 移除 istio-system 命名空間:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    5. 移除 asm-system 命名空間:

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

         kubectl get ns
         ```
        
        The output should indicate a `Terminating` state and return as shown,
        otherwise you might have to manually delete any remaining resources in
        the namespaces and try again.
        
        ```sh
         NAME                 STATUS       AGE
         istio-system         Terminating  71m
         asm-system           Terminating  71m
         ```
        
  7. 如果您要刪除叢集 (或已刪除),請確保每個叢集都已從機群取消註冊

  8. 如要在機群層級停止使用 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。