停用或卸载 Istio on GKE

本指南介绍了如何从集群中停用或完全卸载 Istio on GKE 插件。

停用 Istio on GKE 插件会停用集群上的 Istio 插件管理,但保留集群上的 Istio 安装和配置。停用 Istio on GKE 插件后,Google 将不再管理集群上的 Istio 安装。您负责管理集群上的 Istio 的配置和生命周期。如需停用 Istio on GKE 插件,请按照停用 Istio on GKE 插件部分中的说明操作。

您可以完全卸载 Istio on GKE 插件,而不是停用该插件。卸载 Istio on GKE 插件会完全从集群中移除 Istio 和所有关联配置。如需卸载 Istio on GKE 插件,请按照从集群卸载 Istio 部分中的说明操作。

停用 Istio on GKE 插件

如果您不希望 Google 管理您的 Istio 安装,则可以停用 Istio on GKE 插件。您的 Istio 安装和配置将保留。为此,请确保您运行的是 GKE 1.17.17-gke.3100+、1.18.16-gke.1600+ 或 1.19.8-gke.1600+ 版。在早期版本的 GKE 上停用 Istio on GKE 插件会完全卸载 Istio(Istio 安装和配置),这可能会导致您的服务停机。

  1. 通过运行以下命令停用 Istio on GKE:

    gcloud beta container clusters update my-cluster --project=$PROJECT_ID \
      --update-addons=Istio=DISABLED
    

从集群中卸载 Istio

如需移除 Istio on GKE 插件,最简单的方法是删除集群。但是,如果必须保留集群中的现有应用,则停用 Istio 需要执行以下步骤:

  1. 确保您已将默认 mTLS 模式设置为宽容模式 mTLS
  2. 将流量从 Istio 入站网关迁出。
  3. 停用 Sidecar 自动注入功能(如果已启用)。
    kubectl label namespace your-namespace istio-injection=disabled
    
  4. 重启应用 Pod(例如,使用滚动式重启)以移除 Envoy Sidecar。
  5. 使用 gcloud 移除 Istio 控制层面
    gcloud beta container clusters update my-cluster --project=$PROJECT_ID \
      --update-addons=Istio=DISABLED
    
  6. 删除 IstioOperatorCustomResource

    kubectl delete istiooperator -n istio-system istio-1-6-11-gke-0
    

    根据您的集群版本,您可能需要将 istio-1-6-11-gke-0 替换为集群中安装的 CustomResource 的名称。您可以通过运行以下命令来获取名称:

    kubectl get istiooperator -n istio-system\
    
  7. 等待几分钟,让 Istio 运算符删除其安装的所有资源。

  8. 删除 istio-system 命名空间(如果存在):

    kubectl delete ns istio-system

  9. 删除其余的 Istio 集群资源:

    for i in $(kubectl get clusterrole,clusterrolebinding,crd | grep istio | cut -f1 -d' '); do kubectl delete $i; done