设置 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,
- 卸载 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,请清除这些资源。
- 将目录切换到 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。
准备工作
-
确保您具有 Writer 或 Manager IBM Cloud IAM 服务访问角色 for IBM Cloud Kubernetes Service。
-
创建一个标准的 Kubernetes 集群,该集群至少包含3个工作节点,每个节点均配备4个核心和16 GB内存(
b3c.4x16)或更高配置。 -
您不能在群集中同时运行社区 Istio 和托管 Istio 附加组件。 如果使用的是现有集群,并且先前在集群中已使用 IBM Helm chart 或通过其他方法安装了 Istio,请清除该 Istio 安装。
-
经典多专区集群: 确保为 IBM Cloud 基础架构帐户启用 虚拟路由和转发(VRF)。 要启用 VRF,请参阅 启用 VRF。 要检查是否已启用 VRF,请使用
ibmcloud account show命令。 如果无法或不想启用 VRF,请启用 VLAN 生成。 要执行此操作,您需要具备“管理网络 VLAN 跨域”基础架构权限,或者您可以请求账户所有者为您启用该权限。 要检查VLAN生成树功能是否已启用,请使用ibmcloud ks vlan spanning get --region REGION命令。
从控制台安装 Istio 附加组件
-
在 集群仪表盘中,单击您要安装“Istio”附加组件的集群名称。
-
转到 “附加组件”部分。
-
在“受管 Istio”卡上,单击安装。
-
再次单击安装。
-
在“受管 Istio”卡上,验证是否列出了该附加组件。
使用 CLI 安装 Istio 附加组件
请登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
-
将
container-service插件更新至最新版本。ibmcloud update && ibmcloud plugin update container-service -
查看支持的 Istio 版本。
ibmcloud ks addon-versions --addon istio -
启用
istio附加组件。 已安装了已正式发布的 Istio 托管插件( 1.29.5 )的默认版本。ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID -
验证受管 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 -
您还可以查看附加组件的各个组件,以确保 Istio 服务及其相应的 pod 已部署。
kubectl get svc -n istio-systemkubectl get pods -n istio-system -
接着,可以将应用程序包含在 Istio 服务网中。
安装 istioctl 命令行工具
在计算机上安装 istioctl CLI 客户机。 有关更多信息,请参阅 istioctl 命令参考。
- 检查群集中安装的 Istio 版本。
istioctl version - 将与群集 Istio 版本相匹配的
istioctl下载到计算机。curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - - 导航至 Istio 包目录。
cd istio-1.29.5 - Linux 和 macOS 用户: 将
istioctl客户机添加到PATH系统变量。export PATH=$PWD/bin:$PATH
自定义 Istio 安装
您可以通过编辑 managed-istio-custom ConfigMap 资源来定制一组 Istio 配置选项。 这些设置包括对控制平面和服务网格中的监视,日志记录和联网的额外控制。
- 描述
managed-istio-customConfigMap 资源,查看其内容和内联文档。kubectl describe cm managed-istio-custom -n ibm-operators - 编辑
managed-istio-customConfigMap 资源。kubectl edit cm managed-istio-custom -n ibm-operators - 在
data部分中,添加以下一个或多个配置选项的<key>: "<value>"对。
istio-components-pilot-requests-cpu-
- 缺省值:
"500m" - 在
milli的CPU中,为istiod组件的Pod配置CPU请求。 更改此值时请务必谨慎。 将此值设置得过低可能导致控制平面无法正常工作,而将此值设置得过高可能导致无法调度istiodpod。
- 缺省值:
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, 配置任何新设置,并应用更改。
- 缺省值:
-
保存并关闭配置文件。
-
如果更改了
istio-global-logging-level或istio-global-proxy-accessLogFile设置,那么必须重新启动数据平面 pod 以将更改应用于这些 pod。- 获取不在
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 禁用插件。
-
在 集群仪表盘中,单击您要从中移除 Istio 附加组件的集群名称。
-
转到 “附加组件”部分。
-
在“受管 Istio”卡上,单击“操作”菜单图标。
-
单击卸载。 该群集已禁用受管 Istio 附加组件。
-
在“托管 Istio”卡片上,请确认您已卸载的插件已不再显示在列表中。
步骤 1:从 CLI 禁用 Istio 附加组件
禁用该附加组件,并确认 Istio 附加组件不再存在。
- 禁用
istio附加组件。ibmcloud ks cluster addon disable istio --cluster CLUSTER_NAME_OR_ID -f - 验证是否此集群中已禁用所有受管 Istio 附加组件。 输出中不应返回任何 Istio 附加组件。
ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID - 等待 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 资源。
-
保存
managed-istio-customConfigMap 以对问题进行故障诊断或稍后重新安装附加组件。kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml -
保存所有 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 ``` -
等待 10 分钟,然后继续执行下一步。
步骤 4:更改 IOP 的安装程序
删除所有 Istio 操作员 (IOP) 资源,如自定义入口网关的资源。
-
确保您的
istioctlcli 工具是所需的补丁版本。istioctl version -
对于上一步保存的每个 IOP 文件,运行
istioctl upgrade命令将 Istio 升级到与istioctl版本相匹配的版本。 该命令还将安装和升级机制从使用集群内操作符改为istioctl。istioctl upgrade -f <filename>.yaml
步骤 5:删除 Istio 操作符和 IOP
删除 Istio 操作员部署、服务帐户、群集角色绑定、群集角色和所有 IOP。 Istio 从集群内 Istio 操作员转移到基于 istioctl 的安装。 现在,您可以清理集群内 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 -
删除 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 附加组件之前保存它们。
-
保存
managed-istio-customConfigMap 以对问题进行故障诊断或稍后重新安装附加组件。kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml -
对于 1.23 及更早版本,请保存所有 IstioOperator CR (IOP)。
a. 列示 IOP 资源:
kubectl get iop -Ab. 对于列出的每个 IOP 资源,将每个资源保存到一个文件:
kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
步骤 2:卸载 Istio 附加组件
从控制台或 CLI 卸载附加组件。 对于 Istio 1.20 及更早版本,任何自定义 Istio 操作符 (IOP) 资源都会自动删除。
从控制台卸载 Istio 附加组件
-
在 集群仪表盘中,单击您要从中移除 Istio 附加组件的集群名称。
-
转到 “附加组件”部分。
-
在“受管 Istio”卡上,单击“操作”菜单图标。
-
单击卸载。 该集群中的托管型 Istio 附加组件已被禁用,且该集群中的所有 Istio 资源均已被移除。
-
在“托管 Istio”卡片上,请确认您已卸载的插件已不再显示在列表中。
从 CLI 卸载 Istio 附加组件
如果未安装不推荐的 istio-sample-bookinfo 和 istio-extras 附加组件,请跳过步骤 1 和 2。
- 禁用
istio-sample-bookinfo附加组件。ibmcloud ks cluster addon disable istio-sample-bookinfo --cluster CLUSTER_NAME_OR_ID - 禁用
istio-extras附加组件。ibmcloud ks cluster addon disable istio-extras --cluster CLUSTER_NAME_OR_ID - 禁用
istio附加组件。ibmcloud ks cluster addon disable istio --cluster CLUSTER_NAME_OR_ID -f - 验证是否此集群中已禁用所有受管 Istio 附加组件。 输出中不应返回任何 Istio 附加组件。
ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
步骤 3: 除去资源
保存资源并禁用附加组件后,可以除去这些资源。
-
卸载期间不会除去
managed-istio-customConfigMap。 如果以后重新启用 Istio 附加组件,则任何 的自定义设置。ConfigMap 都会在安装过程中应用。 如果不想在以后安装 Istio 时重新使用自定义设置,则必须删除 ConfigMap。kubectl delete cm -n ibm-operators managed-istio-custom -
对于 1.23 及更早版本,删除自定义 Istio 操作符 (IOP) 资源和 IOP。
a. 删除您创建的任何自定义 Istio 操作员 (IOP) 资源,例如用于自定义入口网关的资源。 运行此命令后,Istio 操作员会自动删除 IOP 资源所创建的任何资源,如部署或服务。
kubectl delete IstioOperator <resource_name> -n <namespace>b. 删除
managed-istioIOP。kubectl delete iop -n ibm-operators managed-istio -
对于 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.valuesb. 删除
addon-istio网关 ConfigMaps。kubectl delete cm -n ibm-operators managed-istio-egressgateway-values kubectl delete cm -n ibm-operators managed-istio-ingressgateway-valuesc. 移除 自定义网关。
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 -
等待 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