更新 ambient mode 组件
本页介绍如何在 ambient mode 下更新 Istio 控制平面、Istio CNI 插件和 ZTunnel 代理。这三个组件均使用 InPlace 更新策略,并且必须严格按照此顺序更新。控制平面更新后,Waypoint 代理会自动滚动更新;有关相关验证步骤,请参阅更新 Waypoint 代理。
目录
使用指定版本安装 ambient mode操作步骤更新组件先决条件更新 Istio 控制平面更新 Istio CNI 插件更新 ZTunnel 代理验证 ambient 工作负载更新 Kiali tracing 配置从开发环境中移除更新资源使用指定版本安装 ambient mode
你可以使用明确指定的版本,在 ambient mode 下安装 Istio 控制平面、Istio CNI 插件和 ZTunnel 代理,以便之后执行更新操作步骤。
本节旨在让你从一个已知的起始版本开始逐步执行更新流程。如果集群已在 ambient mode 下运行 Istio,请跳过本节。此处的安装步骤与安装 Istio ambient mode相同,但每个资源都会将 spec.version 固定为较早的版本。
操作步骤
-
创建
istio-cni、istio-system和ztunnel命名空间,并为每个命名空间添加istio-discovery=enabled标签,以便控制平面发现它们: -
创建使用起始版本的
IstioCNI资源:- 固定
spec.version可指定更新操作步骤的起始版本。
- 固定
-
等待 Istio CNI Pod 就绪:
-
创建使用相同起始版本的
Istio资源:InPlace是默认策略,因此此字段为可选项;此处将其显式列出,以明确指定策略。Ambient mode 不支持其他策略。
-
等待 Istio 控制平面就绪:
-
创建使用相同起始版本的
ZTunnel资源:- 与安装指南不同,此示例设置了
spec.version,以便下文的 ZTunnel 更新步骤可以从较早的版本升级。
- 与安装指南不同,此示例设置了
-
等待 ZTunnel Pod 就绪:
-
在集群中设置原生应用工作负载。例如,你可以将 Bookinfo 示例原生应用部署到
bookinfo命名空间。以下步骤是在 ambient mode 下部署 Bookinfo 应用的精简版本。a. 创建
bookinfo命名空间,并添加istio-discovery=enabled标签,以便控制平面发现该命名空间:b. 部署 Bookinfo 应用:
c. 部署 Bookinfo 应用各版本对应的服务:
d. 将该命名空间中的所有工作负载加入 ambient mesh:
更新组件
先决条件
- 您已使用 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 您已安装 Alauda Container Platform Multi-Network 插件(之前称为 Alauda Container Platform Networking for Multus)。
- kube-ovn 版本为 v4.1.5 或更高版本,并使用 overlay 网络。Ambient 模式无法在 kube-ovn underlay 网络上运行;请参阅 Ambient 模式无法在 kube-ovn underlay 网络上运行。
- 您已将 Alauda Service Mesh Operator 升级到 2.1.2 或更高版本,并且 Operator 中提供了新的目标版本。有关详情,请参阅了解 Operator 更新和通道。
- Istio 已以 ambient 模式部署。在本示例中,
Istio、IstioCNI和ZTunnel资源的名称均为default。 - 集群运行的 Kubernetes 版本受目标 Istio 版本支持。Istio 1.30 支持 Kubernetes 1.32 至 1.36,Istio 1.28 支持 Kubernetes 1.30 至 1.34,因此,运行 Kubernetes 1.30 或 1.31 的集群必须先升级,然后才能将 Istio 更新到 1.30。
- 您已在本地计算机上安装
istioctl。 - 原生应用工作负载已加入 ambient mesh。在本示例中,Bookinfo 原生应用运行在
bookinfo命名空间中;请参阅以 ambient 模式部署 Bookinfo 原生应用。
更新 Istio 控制平面
-
更改
Istio资源中的版本。例如,要更新到 Istio1.30.4,请运行以下命令,将spec.version字段设为v1.30.4:Operator 会用新版本替换正在运行的控制平面。ZTunnel 和所有 waypoint 代理都会自动重新连接到新的 istiod 实例;原生应用 Pod 会继续运行,无需重启。
-
等待控制平面就绪:
-
确认控制平面报告了新版本:
示例输出
更新 Istio CNI 插件
只有在控制平面更新完成后,才能更新 Istio CNI 插件,因为版本为 1.x 的 CNI 插件支持版本为 1.x 或 1.x+1 的控制平面。
-
将
IstioCNI资源的spec.version字段设为与控制平面相同的版本: -
监视
istio-cni-nodeDaemonSet 的滚动更新: -
等待
IstioCNI资源报告就绪: -
确认 CNI 插件报告了新版本:
示例输出
将 Istio CNI 插件更新到 1.30 会更改 ambient 工作负载的两个默认设置:
- 启用 DNS 捕获。Istio CNI 会在启动时协调已加入工作负载的 Pod 内重定向规则,因此无需重启这些工作负载。
- Istio CNI 智能体现在会遵循
values.cni.excludeNamespaces。被排除命名空间中的已加入工作负载会从 mesh 中移除。
有关 IstioCNI 资源及其更新行为的详情,请参阅 Istio CNI 更新流程。
更新 ZTunnel 代理
最后更新 ZTunnel 代理,且仅在控制平面和 CNI 插件都运行新版本后执行。
替换 ZTunnel Pod 可能会重置该节点上的长连接 TCP 连接。如果您的工作负载持有长连接,请在执行此步骤前查看 ZTunnel 更新流程,并选择适当的缓解措施。
-
将
ZTunnel资源的spec.version字段设为与控制平面相同的版本: -
监视 ZTunnel DaemonSet 的滚动更新:
NOTEDaemonSet 会逐个节点替换 ZTunnel Pod,以保持 mesh 连接,因此在较大的集群中,滚动更新可能需要几分钟。
-
等待
ZTunnel资源报告就绪: -
确认 ZTunnel 代理报告了新版本:
示例输出
-
检查各节点上的 ZTunnel Pod:
示例输出
验证 ambient 工作负载
所有组件运行新版本后,确认工作负载仍参与网格。
-
检查应用 pod 是否正在运行:
示例输出
-
确认 ZTunnel 仍在代理这些工作负载。加入 ambient 网格的 pod 会报告
HBONE协议:示例输出
-
通过从另一个 pod 调用服务来测试网格中的连接:
示例输出
如果部署了 waypoint proxy,请按照更新 waypoint proxy中的说明进一步进行验证。
更新 Kiali tracing 配置
从 Istio 1.30 开始,waypoint proxy 会使用 waypoint 自身的服务名称(例如 waypoint.bookinfo)报告每个 trace span,而不是使用 Istio 1.28 采用的目标服务名称。这是上游有意进行的更改,使 Istio 与 OpenTelemetry 规范保持一致;在该规范中,service.name 标识 span 的生成者。
更新到 Istio 1.30 或更高版本后,此更改会对 tracing 产生以下两个影响:
- 除非在
Kiali资源中将external_services.tracing.use_waypoint_name设置为true,否则 Kiali 不会显示 ambient 工作负载的 trace。启用此设置后,Kiali 会根据 waypoint 名称查找 trace,并使用 span 标签(例如istio.destination_canonical_service)将 span 归属到正确的工作负载。此设置对 sidecar 模式工作负载没有影响。 - 更新前记录的 trace 仍会使用旧的每服务名称(例如
productpage.bookinfo.svc.cluster.local),而新 trace 会显示在waypoint.<namespace>下。这种 trace 查询的不连续是预期行为。在 Jaeger UI 中,选择waypoint.<namespace>服务,并使用 Operation 下拉菜单或istio.destination_canonical_service=<service>等标签过滤器缩小结果范围。
如果已安装带有 tracing 集成的 Alauda Build of Kiali(请参阅将分布式 tracing 平台与 Alauda Build of Kiali 集成),请启用此设置:
-
Patch
Kiali资源:示例输出
-
等待 Kiali Operator 调和配置并推出 Kiali deployment:
-
在 Kiali UI 中,打开 ambient 命名空间中某个工作负载的 Traces 选项卡,并确认 trace 再次显示。
从开发环境中移除更新资源
在开发环境中完成更新操作步骤验证后,移除示例应用和网格组件,以释放资源: