设置 Istio 受管插件

Istio on IBM Cloud® Kubernetes Service 提供了 Istio 的无缝安装,可对 Istio 控制平面组件进行自动更新和生命周期管理,并可与平台日志记录和监视工具相集成。

从群集中删除其他 Istio 安装

如果您之前曾使用 IBM Helm 图表或通过其他方法在集群中安装了 Istio,请在启用托管型 Istio 附加组件之前,先清理该 Istio 安装。

开始之前: 确认群集中已安装 Istio。 运行 kubectl get namespaces,在输出中查找 istio-system 命名空间。

要删除其他 Istio 安装:

  • 如果您是通过 IBM Cloud Istio Helm 中的图表安装了 Istio,

    1. 卸载 Istio Helm 部署。
        helm del istio --purge
        ```
    2. 如果使用的是 Helm 2.9 或更低版本,请删除额外的作业资源。
    ```sh {: pre}
        kubectl -n istio-system delete job --all
        ```
    3. 卸载过程可能最长需要 10 分钟。 在集群中安装 Istio 受管附加组件后,请运行 `kubectl get namespaces`,并验证 `istio-system` 名称空间是否已除去。
    
    
  • 如果您是手动安装的 Istio,或者使用了 Istio 社区的 Helm 图表,请参阅 Istio 中的卸载文档

  • 如果先前已在集群中安装了 BookInfo,请清除这些资源。

    1. 将目录切换到 Istio 文件位置。
        cd <filepath>/istio-1.29.5
        ```
    2. 删除集群中的所有 BookInfo 服务、pod 和部署。
    ```sh {: pre}
        samples/bookinfo/platform/kube/cleanup.sh
        ```
    3. 卸载过程可能最长需要 10 分钟。 在集群中安装 Istio 受管附加组件后,请运行 `kubectl get namespaces`,并验证 `istio-system` 名称空间是否已除去。
    
    
    
    

安装 Istio 附加组件

您可以安装受管 Istio 附加组件,而不是社区 Istio。

准备工作

从控制台安装 Istio 附加组件

  1. 集群仪表盘中,单击您要安装“Istio”附加组件的集群名称。

  2. 转到 “附加组件”部分。

  3. 在“受管 Istio”卡上,单击安装

  4. 再次单击安装

  5. 在“受管 Istio”卡上,验证是否列出了该附加组件。

使用 CLI 安装 Istio 附加组件

请登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。

  1. container-service 插件更新至最新版本。

    ibmcloud update && ibmcloud plugin update container-service
    
  2. 查看支持的 Istio 版本

    ibmcloud ks addon-versions --addon istio
    
  3. 启用 istio 附加组件。 已安装了已正式发布的 Istio 托管插件( 1.29.5 )的默认版本。

    ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID
    
  4. 验证受管 Istio 附加组件的状态是否为 Addon Ready

    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    

    示例输出

    NAME            Version     Health State   Health Status
    istio           1.29.5       normal         Addon Ready
    
  5. 您还可以查看附加组件的各个组件,以确保 Istio 服务及其相应的 pod 已部署。

    kubectl get svc -n istio-system
    
    kubectl get pods -n istio-system
    
  6. 接着,可以将应用程序包含在 Istio 服务网中。

安装 istioctl 命令行工具

在计算机上安装 istioctl CLI 客户机。 有关更多信息,请参阅 istioctl 命令参考

  1. 检查群集中安装的 Istio 版本。
    istioctl version
    
  2. 将与群集 Istio 版本相匹配的 istioctl 下载到计算机。
    curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh -
    
  3. 导航至 Istio 包目录。
    cd istio-1.29.5
    
  4. Linux 和 macOS 用户: 将 istioctl 客户机添加到 PATH 系统变量。
    export PATH=$PWD/bin:$PATH
    

自定义 Istio 安装

您可以通过编辑 managed-istio-custom ConfigMap 资源来定制一组 Istio 配置选项。 这些设置包括对控制平面和服务网格中的监视,日志记录和联网的额外控制。

  1. 描述 managed-istio-custom ConfigMap 资源,查看其内容和内联文档。
    kubectl describe cm managed-istio-custom -n ibm-operators
    
  2. 编辑 managed-istio-custom ConfigMap 资源。
    kubectl edit cm managed-istio-custom -n ibm-operators
    
  3. data 部分中,添加以下一个或多个配置选项的 <key>: "<value>" 对。
istio-components-pilot-requests-cpu
缺省值: "500m"
milli 的CPU中,为 istiod 组件的Pod配置CPU请求。 更改此值时请务必谨慎。 将此值设置得过低可能导致控制平面无法正常工作,而将此值设置得过高可能导致无法调度 istiod pod。
istio-global-logging-level
缺省值: "default:info"
定义控制平面组件的日志范围和日志消息级别。 作用域表示控制平面组件中的功能区域,每个作用域都支持特定的日志信息级别。 default 日志记录作用域 (针对未分类的日志消息) 将应用于基本 info 级别的控制平面中的所有组件。
要为各个组件作用域指定日志级别,请输入以逗号分隔的作用域和级别列表,例如: "<scope>:<level>,<scope>:<level>"。 有关各控制平面组件的作用域列表以及日志信息的信息级别,请参阅 Istio 组件日志记录文档。 要更改数据平面的日志级别,请使用 istioctl proxy-config log <pod> --level <level> 命令。
istio-global-outboundTrafficPolicy-mode
缺省值: "ALLOW_ANY"
默认情况下,服务网格中所有出站流量均被允许。 要阻止从服务网格到未在服务注册表中定义或在服务网格中没有 ServiceEntry 的任何主机的出站流量,请设置为 REGISTRY_ONLY
istio-global-proxy-accessLogFile
缺省值: ""
Envoy 代理会将访问信息打印到其标准输出中。 当您调试入口或出口问题时,这些日志很有用。 要在为 Envoy 容器运行 kubectl logs 命令时查看此访问信息,请设置为 "/dev/stdout"
istio-monitoring-telemetry
缺省值: "true"
默认情况下,遥测指标和 Prometheus 功能已启用。 要除去与遥测度量相关联的任何性能问题并禁用所有监视,请设置为 "false"
istio-meshConfig-enableTracing
缺省值: "true"
默认情况下, Istio 会为每 100 个请求中的 1 个生成跟踪跨度。 要禁用跟踪范围,请设置为 "false"
istio-pilot-traceSampling
缺省值: "1.0"
默认情况下, Istio 会为每 100 个请求中的 1 个生成跟踪跨度,采样率为 1%。 要生成更多跟踪范围,请增大百分比值。
istio-components-pilot-hpa-maxReplicas
缺省值: "5"
默认情况下, Istio 将 istiod 的默认水平 Pod 自动缩放器(HPA)最大 Pod 数设置为 5。 除非您的服务网格较大,且 istiod 需要更多资源来更新配置,否则不要增加该值。

例如,您的 ConfigMap 可能如下所示。

apiVersion: v1
data:
  istio-ingressgateway-zone-1: dal10
  <key: value> # such as istio-egressgateway-public-1-enabled: "false"
kind: ConfigMap
metadata:
  name: managed-istio-custom
  namespace: ibm-operators

在您的表格中没有看到该表中的选项 ConfigMap? 由于 ConfigMap 包含用户定义的值,因此 ConfigMap 不会随时间的推移更新任何选项。 相反,您可以备份 ConfigMap 的副本,然后从群集中删除 ConfigMap。 大约 5 分钟后,群集中会创建一个包含新选项的默认 ConfigMap。 然后,您可以将先前配置的设置从备份复制到此默认设置 ConfigMap, 配置任何新设置,并应用更改。

  1. 保存并关闭配置文件。

  2. 如果更改了 istio-global-logging-levelistio-global-proxy-accessLogFile 设置,那么必须重新启动数据平面 pod 以将更改应用于这些 pod。

    1. 获取不在 istio-system 名称空间中的所有数据平面 pod 的列表。
        istioctl version --short=false | grep "data plane version" | grep -v istio-system
        ```
        示例输出
    
        ```sh {: screen}
        data plane version: version.ProxyInfo{ID:"test-6f86fc4677-vsbsf.default", IstioVersion:"1.29.5"}
        data plane version: version.ProxyInfo{ID:"rerun-xfs-f8958bb94-j6n89.default", IstioVersion:"1.29.5"}
        data plane version: version.ProxyInfo{ID:"test2-5cbc75859c-jh6bx.default", IstioVersion:"1.29.5"}
        data plane version: version.ProxyInfo{ID:"minio-test-78b5d4597d-hkpvt.default", IstioVersion:"1.29.5"}
        data plane version: version.ProxyInfo{ID:"sb-887f89d7d-7s8ts.default", IstioVersion:"1.29.5"}
        data plane version: version.ProxyInfo{ID:"gid-deployment-5dc86db4c4-kdshs.default", IstioVersion:"1.29.5"}
        ```
    2. 通过删除每个 pod 来将其重新启动。 在上一步的输出中,pod 名称和名称空间在每个条目中列示为 `data plane version: version.ProxyInfo{ID:"<pod_name>.<namespace>", IstioVersion:"1.29.5"}`。
    ```sh {: pre}
        kubectl delete pod <pod_name> -n <namespace>
        ```
    
要更改 ConfigMap 设置吗?
如果要更改已添加到ConfigMap,您可以使用补丁脚本。 例如,如果添加了 istio-global-proxy-accessLogFile: "/dev/stdout" 设置,并且以后想要将其更改回 "",那么可以运行 kubectl patch cm managed-istio-custom -n ibm-operators --type='json' -p='[{"op": "add", "path": "/data/istio-global-proxy-accessLogFile", "value":""}]'
需要在 1.24 或更高版本中调试自定义设置吗?
检查 ibm-operators 名称空间中 managed-istio-istiod-controlplane-values configmap 中的 helm value.yaml 和 helm 结果日志。 value.yaml 将显示您的更改是否已添加。 分析结果将显示是否存在语法错误。
kubectl get cm -n ibm-operators managed-istio-istiod-control-plane-values -o json | jq -r .data.\"values.yaml\"
kubectl get cm -n ibm-operators managed-istio-istiod-control-plane-values -o json | jq -r .data.\"values.yaml.helm.result\"
Thu, 23 Oct 2025 19:58:48 GMT HELM_SUCCESS: Release "istiod" has been upgraded. Happy Helming!
NAME: istiod
LAST DEPLOYED: Thu Oct 23 19:58:42 2025
NAMESPACE: istio-system
STATUS: deployed
REVISION: 275
TEST SUITE: None
NOTES:
"istiod" successfully installed!
需要在 1.23 中调试定制设置吗?
运行 kubectl logs -n ibm-operators -l name=managed-istio-operator 查看 addon-istio-operator ( Istio 版本 1.10 至 1.23 ) pod 的日志。 Istio 操作员会验证和核对您所做的任何自定义 Istio 更改。

如果禁用 Istio 附加组件,则在卸载过程中不会移除 managed-istio-custom ConfigMap。 重新启用 Istio 附加组件时,您自定义的 ConfigMap 会在安装过程中应用。 如果不想在以后安装 Istio 时重新使用自定义设置,则必须在运行 kubectl delete cm -n ibm-operators managed-istio-custom 禁用 Istio 附加组件后删除 ConfigMap。 重新启用 Istio 附加组件时,默认的 ConfigMap 会在安装过程中应用。

从 Istio 附加组件迁移到社区 Istio

如果您正在使用 Istio 受管附加组件版本 1.21 至 1.23,您可以迁移到较新版本的社区 Istio 来代替。

开始之前: 如果您不再需要 Istio,您可以 卸载该附加组件,无需安装社区 Istio,而无需完成这些步骤。

步骤 1:从控制台禁用 Istio 附加组件

从控制台或 CLI 禁用插件。

  1. 集群仪表盘中,单击您要从中移除 Istio 附加组件的集群名称。

  2. 转到 “附加组件”部分。

  3. 在“受管 Istio”卡上,单击“操作”菜单图标。

  4. 单击卸载。 该群集已禁用受管 Istio 附加组件。

  5. 在“托管 Istio”卡片上,请确认您已卸载的插件已不再显示在列表中。

步骤 1:从 CLI 禁用 Istio 附加组件

禁用该附加组件,并确认 Istio 附加组件不再存在。

  1. 禁用 istio 附加组件。
    ibmcloud ks cluster addon disable istio --cluster CLUSTER_NAME_OR_ID -f
    
  2. 验证是否此集群中已禁用所有受管 Istio 附加组件。 输出中不应返回任何 Istio 附加组件。
    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    
  3. 等待 10 分钟,然后继续执行下一步。 这样,我们就有时间取消对 Istio 操作符的管理。

步骤 2:缩小 Istio 运算器的规模

缩减 Istio 操作员的部署规模。 当从 Istio 附加组件使用的集群内 Istio 操作符迁移到社区 Istio 使用的 istioctl 时,必须避免两种安装方法争夺 Istio 的控制权。 缩减运算符、删除 IOP,然后删除运算符的步骤可删除群集内的运算符,而无需卸载 Istio。

运行以下命令:

kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0

步骤 3:节约资源

请保存您在 istio-system 命名空间中创建或修改的任何资源,以及由自定义资源定义(CRD)自动生成的所有 Kubernetes 资源。

  1. 保存 managed-istio-custom ConfigMap 以对问题进行故障诊断或稍后重新安装附加组件。

    kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
    
  2. 保存所有 IstioOperator CR (IOPs)。 集群内 Istio 操作员在 IOP 上有一个终结器,防止其被删除,直到集群内操作员删除 IOP 中定义的资源。 在删除 Istio 操作符而不删除 Istio 时,必须删除终结符。

    • 列示 IOP 资源:
        kubectl get iop -A
        ```
    - 对于列出的每个 IOP 资源,移除终结器。
    
        使用 `managed-istio` IOP 的示例:
        ```sh {: pre}
        kubectl patch -n ibm-operators istiooperator/managed-istio --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'
        ```
    - 对于列出的每个 IOP 资源,将每个资源保存到一个文件:
    ```sh {: pre}
        kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
        ```
    
  3. 等待 10 分钟,然后继续执行下一步。

步骤 4:更改 IOP 的安装程序

删除所有 Istio 操作员 (IOP) 资源,如自定义入口网关的资源。

  1. 确保您的 istioctl cli 工具是所需的补丁版本。

    istioctl version
    
  2. 对于上一步保存的每个 IOP 文件,运行 istioctl upgrade 命令将 Istio 升级到与 istioctl 版本相匹配的版本。 该命令还将安装和升级机制从使用集群内操作符改为 istioctl

    istioctl upgrade -f <filename>.yaml
    

步骤 5:删除 Istio 操作符和 IOP

删除 Istio 操作员部署、服务帐户、群集角色绑定、群集角色和所有 IOP。 Istio 从集群内 Istio 操作员转移到基于 istioctl 的安装。 现在,您可以清理集群内 Istio 操作员安装的残留物,同时缩小其规模。

  1. 运行以下命令删除 Istio 操作员部署:

    kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrole addon-istio-operator --ignore-not-found=true
    
  2. 删除 IOP。

    • 列示 IOP 资源:
        kubectl get iop -A
        ```
    - 删除列出的每个 IOP 资源:
    ```sh {: pre}
        kubectl delete IstioOperator <resource_name> -n <namespace>
        ```
    

步骤 6:拆除 ConfigMap

因为 ConfigMap 是之前保存的,所以可以删除。

取下 managed-istio-custom ConfigMap。

kubectl delete cm -n ibm-operators managed-istio-custom

移除附加组件的工作已经完成,您可以继续使用并根据需要升级社区 Istio。

卸载 Istio 插件

如果您已完成对 Istio 的使用,可以清理集群中的 Istio 资源,并卸载 Istio 附加组件。

步骤 1: 在卸载之前保存资源

将除去您在 istio-system 名称空间中创建或修改的任何资源。 要保留这些资源,请在卸载 Istio 附加组件之前保存它们。

  1. 保存 managed-istio-custom ConfigMap 以对问题进行故障诊断或稍后重新安装附加组件。

    kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
    
  2. 对于 1.23 及更早版本,请保存所有 IstioOperator CR (IOP)。

    a. 列示 IOP 资源:

    kubectl get iop -A
    

    b. 对于列出的每个 IOP 资源,将每个资源保存到一个文件:

    kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
    

步骤 2:卸载 Istio 附加组件

从控制台或 CLI 卸载附加组件。 对于 Istio 1.20 及更早版本,任何自定义 Istio 操作符 (IOP) 资源都会自动删除。

从控制台卸载 Istio 附加组件

  1. 集群仪表盘中,单击您要从中移除 Istio 附加组件的集群名称。

  2. 转到 “附加组件”部分。

  3. 在“受管 Istio”卡上,单击“操作”菜单图标。

  4. 单击卸载。 该集群中的托管型 Istio 附加组件已被禁用,且该集群中的所有 Istio 资源均已被移除。

  5. 在“托管 Istio”卡片上,请确认您已卸载的插件已不再显示在列表中。

从 CLI 卸载 Istio 附加组件

如果未安装不推荐的 istio-sample-bookinfoistio-extras 附加组件,请跳过步骤 1 和 2。

  1. 禁用 istio-sample-bookinfo 附加组件。
    ibmcloud ks cluster addon disable istio-sample-bookinfo --cluster CLUSTER_NAME_OR_ID
    
  2. 禁用 istio-extras 附加组件。
    ibmcloud ks cluster addon disable istio-extras --cluster CLUSTER_NAME_OR_ID
    
  3. 禁用 istio 附加组件。
    ibmcloud ks cluster addon disable istio --cluster CLUSTER_NAME_OR_ID -f
    
  4. 验证是否此集群中已禁用所有受管 Istio 附加组件。 输出中不应返回任何 Istio 附加组件。
    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    

步骤 3: 除去资源

保存资源并禁用附加组件后,可以除去这些资源。

  1. 卸载期间不会除去 managed-istio-custom ConfigMap。 如果以后重新启用 Istio 附加组件,则任何 的自定义设置。ConfigMap 都会在安装过程中应用。 如果不想在以后安装 Istio 时重新使用自定义设置,则必须删除 ConfigMap。

    kubectl delete cm -n ibm-operators managed-istio-custom
    
  2. 对于 1.23 及更早版本,删除自定义 Istio 操作符 (IOP) 资源和 IOP。

    a. 删除您创建的任何自定义 Istio 操作员 (IOP) 资源,例如用于自定义入口网关的资源。 运行此命令后,Istio 操作员会自动删除 IOP 资源所创建的任何资源,如部署或服务。

    kubectl delete IstioOperator <resource_name> -n <namespace>
    

    b. 删除 managed-istio IOP。

    kubectl delete iop -n ibm-operators managed-istio
    
  3. 对于 1.24 及更高版本,保存后删除 addon-istio 网关 ConfigMaps, 删除自定义网关,并删除 Istio 控制平面。

    a. 保存 addon-istio 网关 ConfigMaps。

    kubectl get cm -n ibm-operators managed-istio-ingressgateway-values -o json | jq -r .data.\"values.yaml\" > ingress-gateway.values
    kubectl get cm -n ibm-operators managed-istio-egressgateway-values -o json | jq -r .data.\"values.yaml\" > egress-gateway.values
    

    b. 删除 addon-istio 网关 ConfigMaps。

    kubectl delete cm -n ibm-operators managed-istio-egressgateway-values
    kubectl delete cm -n ibm-operators managed-istio-ingressgateway-values
    

    c. 移除 自定义网关

    d. 删除 Istio 控制平面。

    istioctl uninstall -y --purge
    

    输出:

    All Istio resources will be pruned from the cluster
    Removed apps/v1, Kind=Deployment/istiod.istio-system.
    Removed /v1, Kind=Service/istiod.istio-system.
    Removed /v1, Kind=ConfigMap/istio.istio-system.
    Removed /v1, Kind=ConfigMap/istio-sidecar-injector.istio-system.
    Removed /v1, Kind=Pod/istiod-7f59b54bfd-p5f4d.istio-system.
    Removed /v1, Kind=Pod/istiod-7f59b54bfd-zckw6.istio-system.
    Removed policy/v1, Kind=PodDisruptionBudget/istiod.istio-system.
    Removed autoscaling/v2, Kind=HorizontalPodAutoscaler/istiod.istio-system.
    Removed admissionregistration.k8s.io/v1, Kind=MutatingWebhookConfiguration/istio-sidecar-injector..
    ✔ Uninstall complete
    
  4. 等待 10 分钟,然后继续执行下一步。

步骤 4:删除 Istio 操作员

对于 1.23 及更早版本,在完全卸载附加组件后,可以删除 Istio 操作符。

删除 Istio 操作员部署、服务帐户、群集角色绑定和群集角色。

kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true
kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true
kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true
kubectl delete clusterrole addon-istio-operator --ignore-not-found=true