解除安裝代管 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 元件。
為避免應用程式流量中斷:
- 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
- 移除可能封鎖流量的 AuthorizationPolicy。
如果其他叢集在您要解除安裝的叢集上執行端點探索,請停用多叢集。
kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'找出需要清除的祕密,然後刪除:
kubectl get secrets -n istio-system -l istio/multiCluster=truekubectl delete secret SECRET_NAME其中 SECRET_NAME 是密鑰的名稱。針對列出的每個密鑰重複執行這個步驟。
如果已啟用,請在命名空間中停用補充資訊自動插入功能。執行下列指令,顯示命名空間標籤:
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標籤,表示命名空間未啟用自動插入功能。
重新啟動已注入 Sidecar 的工作負載,移除 Proxy。
確認沒有任何 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)" '將網狀架構功能成員資格規格管理更新為
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)。
確認控制層狀態的網格功能成員狀態為
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,請稍待幾分鐘後再查看。- 如果控制層狀態為
STALLED,則由於內部錯誤情況,系統會禁止執行解除安裝作業。如果問題仍未解決,請與支援團隊聯絡。
- 如果控制層狀態為
(選用) 移除 Istio CR、Istio CRD、istio-(修訂版本) configmap、asm-options configmap 和
istio-system命名空間,從叢集移除服務網格,或在其他與 Istio API 相容的服務網格中使用這些項目。移除 Istio CR:
kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces移除 Istio CRD:
kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete移除 istio-(修訂版本) configmap。如果刪除
istio-system命名空間,可以略過這個步驟。kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system將 RELEASE_CHANNEL 替換為您的發布管道 (
asm-managed、asm-managed-stable或asm-managed-rapid)。移除 asm-options configmap:
kubectl delete configmap asm-options -n istio-system移除
istio-system命名空間:kubectl delete namespace istio-system --ignore-not-found=true確認刪除作業是否成功:
kubectl get ns輸出內容應會指出
Terminating狀態,並如以下所示傳回,否則您可能必須手動刪除命名空間中剩餘的資源,然後再試一次。NAME STATUS AGE istio-system Terminating 71m
如果您使用憑證授權單位服務,請清除為受管理 Cloud Service Mesh 設定憑證授權單位服務時建立的權限和 CA 集區。
如果您已啟用受管理 Cloud Service Mesh 機群預設設定,並想為日後的叢集停用這項設定,請停用這項設定。如果只從單一叢集解除安裝,可以略過這個步驟。
gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID其中 FLEET_PROJECT_ID 是車隊主專案的 ID。
如要在機群層級停止使用 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。