卸载 Cloud Service Mesh
如果您使用的是 Istio API,本页介绍了如何卸载 Cloud Service Mesh。如果您使用的是 Compute Engine API,则无需执行任何步骤。如需了解差异,请参阅 Cloud Service Mesh 概览。
按照以下说明卸载 Cloud Service Mesh 会移除所有配置,无论控制平面类型为集群内还是代管式均是如此。如果您要从集群内控制器迁移到代管式控制器,请改为按照迁移指南操作。
卸载 Cloud Service Mesh
使用以下命令卸载所有 Cloud Service Mesh 组件。这些命令还会删除 istio-system
命名空间和所有自定义资源定义 (CRD),包括您应用的所有 CRD。
为防止应用流量中断,请执行以下操作:
- 将任何 STRICT mTLS 政策降级为 PERMISSIVE。
- 移除任何可能阻止流量的 AuthorizationPolicy。
对此集群停用自动管理(无论您是直接应用还是使用舰队默认配置):
gcloud container fleet mesh update \ --management manual \ --memberships MEMBERSHIP_NAME \ --project FLEET_PROJECT_ID \ --location MEMBERSHIP_LOCATION
替换以下内容:
- MEMBERSHIP_NAME 是您在验证集群是否已注册到舰队时列出的成员资格名称。
- MEMBERSHIP_LOCATION 是您的成员资格所在的位置(区域或
global
)。
在您的命名空间中停用 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
标签,则表示命名空间未启用自动注入功能。重启已注入 Sidecar 的工作负载以移除代理。
如果您使用的是托管式 Cloud Service Mesh,请检查集群中采用的是哪种控制平面实现,这有助于您在后续步骤中删除相关资源。
如果您使用的是托管式 Cloud Service Mesh,请移除集群中的所有
controlplanerevision
资源:kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
从集群中删除网络钩子(如果存在)。
集群内 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
当所有工作负载启动且未观察到代理时,您便可以安全地删除集群内控制平面以停止计费。
如需移除集群内控制平面,请运行以下命令:
istioctl uninstall --purge
如果没有其他控制平面,则您可以删除
istio-system
命名空间以移除所有 Cloud Service Mesh 资源。否则,请删除与 Cloud Service Mesh 修订版本相对应的服务。这样可以避免删除 CRD 等共享资源。删除
istio-system
和asm-system
命名空间:kubectl delete namespace istio-system asm-system --ignore-not-found=true
检查删除操作是否成功:
kubectl get ns
输出应指示
Terminating
状态并返回所示内容,否则您可能需要手动删除命名空间中的其余资源并重试。NAME STATUS AGE istio-system Terminating 71m asm-system Terminating 71m
如果您要删除集群或已删除集群,请确保已从舰队取消注册每个集群。
如果您启用了代管式 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,请检查并删除代管式资源(如果有):
删除
mdp-controller
部署:kubectl delete deployment mdp-controller -n kube-system
如果您使用的是
TRAFFIC_DIRECTOR
控制平面实现,请清理透明健康检查资源。通常,系统会自动移除这些内容,但您可以执行以下操作,确保这些内容已被清理:删除
snk
DaemonSet。kubectl delete daemonset snk -n kube-system
删除防火墙规则。
gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
替换以下内容:
- FIRST_8_CHARS_OF_CLUSTER_ID 是您特定集群的集群 ID 的前 8 个字符。
检查是否存在
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
删除
istio-cni-node
DaemonSet:kubectl delete daemonset istio-cni-node -n kube-system
如果您要卸载托管式 Cloud Service Mesh,请与支持团队联系,以确保清理所有 Google Cloud 资源。如果您不执行此步骤,系统可能还会继续重新创建
istio-system
命名空间和配置映射。
完成这些步骤后,所有 Cloud Service Mesh 组件(包括代理、集群内证书颁发机构以及 RBAC 角色和绑定)都会从集群中系统地移除。在安装过程中,系统会向 Google 拥有的服务账号授予在集群中建立服务网格资源所需的权限。这些卸载说明不会撤消这些权限,以便您日后能够顺利重新启用 Cloud Service Mesh。
联系