解除安裝 Cloud Service Mesh

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

按照這些操作說明解除安裝 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. 如果已啟用,請在命名空間中停用 Sidecar 自動插入功能。執行下列指令,顯示命名空間標籤:

     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/rev 或 istio-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
    

    檢查 controlplanerevision 資源的狀態,確認資源是否已刪除:

    kubectl get controlplanerevision -n istio-system
    

    如果輸出內容顯示 controlplanerevision 資源仍存在,可能表示該資源卡在 mesh.cloud.google.com/deprovision 終結器中。在這種情況下,您可以從資源中手動移除終結器,允許刪除資源:

    kubectl patch controlplanerevision CPR_NAME -n istio-system -p '{"metadata":{"finalizers":null}}' --type=merge
    

    將 CPR_NAME 替換成上一個步驟傳回的控制層修訂版本名稱,例如 asm-managed。

  7. 從叢集刪除 Webhook (如有)。

    叢內 Cloud Service Mesh

    刪除 validatingwebhooksconfiguration 和 mutatingwebhookconfiguration。

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    

    代管 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
    

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

  9. 刪除 istio-system 和 asm-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,請為機群主專案停用服務網格功能。

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    其中 FLEET_PROJECT_ID 是機群主機專案的 ID。

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

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

        kubectl delete deployment mdp-controller -n kube-system
      
    2. 取得並刪除資料平面控制自訂資源:

      1. 取得資料層控制 CR:

        kubectl get dataplanecontrol
        
      2. 刪除資料平面控制項 CR:

        kubectl delete dataplanecontrol DATA_PLANE_CONTROL_CR_NAME
        

        將 DATA_PLANE_CONTROL_CR_NAME 換成上一個指令的輸出內容。

      3. 刪除 controlplanerevision 和 dataplanecontrol CRD:

        kubectl delete crd controlplanerevisions.mesh.cloud.google.com dataplanecontrols.mesh.cloud.google.com
        
    3. 如果您有 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 個字元。
    4. 檢查 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
      
    5. 刪除 istio-cni-node DaemonSet:

        kubectl delete daemonset istio-cni-node -n kube-system
      
  15. 如要解除安裝代管 Cloud Service Mesh,請與支援團隊聯絡,確保所有Google Cloud 資源都已清除。如果您未按照這個步驟操作,istio-system 命名空間和設定對應可能也會繼續重新建立。

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

聯絡。