解除安裝 Cloud Service Mesh

本頁說明如何在使用 Istio API 時解除安裝 Cloud Service Mesh。如果您使用 Compute Engine API,則不必採取任何步驟。如要瞭解兩者的差異,請參閱 Cloud Service Mesh 總覽

解除安裝 Cloud Service Mesh

使用下列指令解除安裝所有 Cloud Service Mesh 元件。這些指令也會刪除 istio-system 命名空間和所有自訂資源定義 (CRD),包括您套用的任何 CRD。

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

    • 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
    • 移除可能封鎖流量的 AuthorizationPolicy。
  2. 在這個叢集上停用自動管理功能 (無論您是直接套用,還是使用機群預設設定):

      gcloud container fleet mesh update \
         --management manual \
         --memberships MEMBERSHIP_NAME \
         --project FLEET_PROJECT_ID \
         --location MEMBERSHIP_LOCATION
    

    更改下列內容:

    • MEMBERSHIP_NAME 是您驗證叢集已註冊至機群時列出的成員名稱。
    • MEMBERSHIP_LOCATION 是會員方案的適用地區 (可以是區域或 global)。
  3. 如果已啟用,請在命名空間中停用補充資訊自動插入功能。執行下列指令,顯示命名空間標籤:

     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 標籤,表示命名空間未啟用自動插入功能。

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

  5. 如果您使用代管 Cloud Service Mesh,請檢查叢集中的控制層實作,這有助於在後續步驟中刪除相關資源。

  6. 如果您使用代管 Cloud Service Mesh,請移除叢集中的所有 controlplanerevision 資源:

    kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
    
  7. 從叢集刪除 Webhook (如有)。

    叢集內 Cloud Service Mesh

    刪除 validatingwebhooksconfigurationmutatingwebhookconfiguration

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot
    

    代管 Cloud Service Mesh

    A. 刪除 validatingwebhooksconfiguration

    kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
    

    B. 刪除所有 mutatingwebhookconfiguration

    kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
    
  8. 所有工作負載啟動後,如果沒有觀察到任何 Proxy,即可安全地刪除叢集內控制層,停止計費。

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

    istioctl uninstall --purge
    

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

  9. 刪除 istio-systemasm-system 命名空間:

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

     kubectl get ns
    

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

     NAME                 STATUS       AGE
     istio-system         Terminating  71m
     asm-system           Terminating  71m
    
  11. 如果您要刪除叢集 (或已刪除),請確保每個叢集都已從機群取消註冊

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

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

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

  13. 如果您已啟用代管 Cloud Service Mesh,請檢查並刪除下列代管資源:

    1. 刪除 mdp-controller 部署作業:

        kubectl delete deployment mdp-controller -n kube-system
      
    2. 如果您有 TRAFFIC_DIRECTOR 控制層實作項目,請清除透明健康狀態檢查資源。通常系統會自動移除這些檔案,但你可以按照下列步驟確認檔案已清除:

      1. 刪除 snk DaemonSet。

           kubectl delete daemonset snk -n kube-system
        
      2. 刪除防火牆規則。

           gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
        

        更改下列內容:

        • FIRST_8_CHARS_OF_CLUSTER_ID 是特定叢集的叢集 ID 前 8 個字元。
    3. 檢查 istio-cni-plugin-config configmap 是否存在:

        kubectl get configmap istio-cni-plugin-config -n kube-system
      

      如果有的話,請刪除 istio-cni-plugin-config configmap:

        kubectl delete configmap istio-cni-plugin-config -n kube-system
      
    4. 刪除 istio-cni-node DaemonSet:

        kubectl delete daemonset istio-cni-node -n kube-system
      
  14. 如果解除安裝受管理 Cloud Service Mesh,但保留叢集,請與支援團隊聯絡,確保所有Google Cloud 資源都已清除。如果未執行此步驟,系統也可能會繼續重新建立 istio-system 命名空間和設定對應。

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