卸载托管式 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"}}'查找需要清理的 Secret,然后将其删除:
kubectl get secrets -n istio-system -l istio/multiCluster=truekubectl delete secret SECRET_NAME其中,SECRET_NAME 是 Secret 的名称。针对列出的每个 Secret 重复此步骤。
在您的命名空间中停用 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 的工作负载以移除代理。
验证是否没有代理连接到代管式控制平面:
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
如果您使用的是 Certificate Authority Service,请清理在为托管式 Cloud Service Mesh 配置 Certificate Authority Service 时创建的权限和 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 组件,包括代理、证书授权机构以及 RBAC 角色和绑定。在安装过程中,Google 拥有的服务账号会被授予在集群中建立服务网格资源所需的权限。这些卸载说明不会撤消这些权限,以便日后顺利重新激活 Cloud Service Mesh。