卸载集群内 Cloud Service Mesh

本页面介绍了如何卸载集群内 Cloud Service Mesh(如果您使用的是 Istio API)。如果您使用的是 Compute Engine API,则无需执行任何步骤。如需了解它们的区别,请参阅 Cloud Service Mesh 概览。

按照以下说明卸载集群内 Cloud Service Mesh 会移除所有配置。

如果您要卸载托管式 Cloud Service Mesh,请改为按照托管式卸载指南进行操作。

如果您要从集群内迁移到托管式,请改为按照迁移指南操作。

移除 Cloud Service Mesh 的影响

在卸载 Cloud Service Mesh 之前,请考虑将从集群和工作负载中移除的功能。从工作负载中移除 Cloud Service Mesh 代理并重启工作负载后,应用会恢复为标准的 Kubernetes 网络行为。

安全

移除 Cloud Service Mesh 后,您将无法再使用以下安全功能:

  • 双向 TLS (mTLS) 加密:服务之间的流量不再使用由网格管理的 mTLS 证书在传输过程中进行加密。
  • 授权政策:不再强制执行网格 AuthorizationPolicy 自定义资源。您必须配置 Kubernetes NetworkPolicy 资源或应用级身份验证和授权,以限制流量。

可观测性

移除 Cloud Service Mesh 后,您将无法再使用以下可观测性功能:

  • 遥测和指标:系统会停止自动收集第 7 层指标(例如请求速率、错误率和延迟时间)。网格遥测不再自动注入到 Cloud Monitoring 中。标准 GKE 指标不受影响。
  • 信息中心和 SLO:Google Cloud 控制台中预配置的 Cloud Service Mesh 信息中心和服务等级目标 (SLO) 监控不再填充数据。
  • 访问日志记录和跟踪:系统不再生成包含客户端 mTLS 身份和自动分布式跟踪记录的边车代理访问日志。

服务发现和网络弹性

移除 Cloud Service Mesh 后,您将无法再使用以下网络和弹性功能:

  • 网络弹性:工作负载会失去 Sidecar 级弹性功能,包括自动重试、可配置的请求超时、断路器、离群点检测和连接池管理。应用必须直接管理连接失败和重试。
  • 多集群服务发现:舰队中多个集群之间的跨集群端点发现和路由不再通过网格运行。服务只能使用标准 DNS 发现其本地集群内的端点。

卸载 Cloud Service Mesh

使用以下命令卸载所有 Cloud Service Mesh 组件。

  1. 为防止应用流量中断,请执行以下操作:

    • 将任何 STRICT mTLS 政策降级为 PERMISSIVE。
    • 移除任何可能阻止流量的 AuthorizationPolicy。
  2. 在您的命名空间中停用 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 标签,则表示命名空间未启用自动注入功能。

  3. 重启已注入 Sidecar 的工作负载以移除代理。

  4. 从集群中删除 validatingwebhooksconfiguration 和 mutatingwebhookconfiguration(如果存在):

      kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    
  5. 当所有工作负载启动且未观察到代理时,您便可以安全地删除集群内控制平面以停止计费。

    如需移除集群内控制平面,请运行以下命令:

    istioctl uninstall --purge
    

    如果没有其他控制平面,您可以删除 istio-system 命名空间以移除所有 Cloud Service Mesh 资源。否则,请删除与 Cloud Service Mesh 修订版本对应的服务。这样可以避免删除 CRD 等共享资源。

  6. (可选)移除 Istio CR、Isto CRD、istio-(修订版本) configmap、asm-options configmap、istio-system 和 asm-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 替换为您的发布渠道

    4. 移除 istio-system 命名空间:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    5. 移除 asm-system 命名空间:

      kubectl delete namespace asm-system --ignore-not-found=true
      
      1. 检查删除操作是否成功:

         kubectl get ns
         ```
        
        The output should indicate a `Terminating` state and return as shown,
        otherwise you might have to manually delete any remaining resources in
        the namespaces and try again.
        
        ```sh
         NAME                 STATUS       AGE
         istio-system         Terminating  71m
         asm-system           Terminating  71m
         ```
        
  7. 如果您将删除集群,或已删除集群,请确保每个集群都已从您的舰队中取消注册。

  8. 如果您计划在舰队级别停止使用 Cloud Service Mesh,请为舰队宿主项目停用服务网格功能。

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    其中,FLEET_PROJECT_ID 是舰队宿主项目的 ID。

完成这些步骤后,系统会从集群中系统地移除所有 Cloud Service Mesh 组件,包括代理、集群内证书授权机构以及 RBAC 角色和绑定。在安装过程中,Google 拥有的服务账号会被授予在集群中建立服务网格资源所需的权限。这些卸载说明不会撤消这些权限,以便将来能够顺利地重新激活 Cloud Service Mesh。