解除安裝代管 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 前,請先瞭解叢集和工作負載會移除哪些功能。從工作負載中移除 Cloud Service Mesh Proxy 並重新啟動後,應用程式就會恢復標準 Kubernetes 網路行為。

安全性

移除 Cloud Service Mesh 後,您將無法使用下列安全性功能:

  • 相互傳輸層安全標準 (mTLS) 加密:服務之間的流量不再透過網格管理的 mTLS 憑證加密傳輸。
  • 授權政策:系統不再強制執行 Mesh AuthorizationPolicy 自訂資源。您必須設定 Kubernetes NetworkPolicy 資源或應用程式層級的驗證和授權,才能限制流量。

觀測能力

移除 Cloud Service Mesh 後,您將無法使用下列可觀測性功能:

  • 遙測和指標:系統會停止自動收集第 7 層指標 (例如要求率、錯誤率和延遲時間)。系統不會再自動將網格遙測資料擷取到 Cloud Monitoring。標準 GKE 指標不受影響。
  • 資訊主頁和 SLO:系統不會再填入預先設定的 Cloud Service Mesh 資訊主頁,以及Google Cloud 控制台中的服務水準目標 (SLO) 監控。
  • 存取記錄和追蹤:系統不會再產生 Sidecar Proxy 存取記錄,其中包含用戶端 mTLS 身分和自動分散式追蹤。

服務探索和網路復原能力

移除 Cloud Service Mesh 後,您將無法使用下列網路和復原功能:

  • 網路復原能力:工作負載會失去 Sidecar 層級的復原能力功能,包括自動重試、可設定的要求逾時、斷路器、離群值偵測和連線集區管理。應用程式必須直接管理連線失敗和重試。
  • 多叢集服務探索:跨叢集端點探索和路由功能不再透過網格運作,而是透過機群中的多個叢集運作。服務只能使用標準 DNS 探索本機叢集內的端點。

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

     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/rev 或 istio-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-(revision) 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-managed、asm-managed-stable 或 asm-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. 如果您使用憑證授權單位服務,請清除為 Managed 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。