迁移单网络网格
单网络网格中的集群共享一个扁平的 pod 网络。代理通过另一个集群中工作负载的 pod 地址访问该工作负载,且网格没有东西向网关。本文档列出了与迁移多网络网格的差异;其他所有内容都与迁移单集群网格相同,只需按集群分别执行。
请先确认拓扑,参见确定网络拓扑。
以下代码块针对一个集群执行,并将其指定为 ${CTX}。在执行第一个代码块前设置该值,并在处理下一个集群时重新设置,参见一次处理一个集群:
在整个迁移过程中,Mesh v2 的每项网络设置都必须与 Mesh v1 保持一致。切勿将 topology.istio.io/network 标签添加到 istio-system 命名空间,也切勿将 Mesh v2 上的 spec.values.global.network 设置为不同于 Mesh v1 的值。否则,两个控制平面会对每个端点所属的网络产生分歧:Mesh v2 会将远程端点重写为不存在的东西向网关地址,从而导致跨集群流量失败。
当两个版本同时为同一网格提供服务时,它们必须对端点所属的网络达成一致。网络信息来自每个控制平面的 spec.values.global.network,以及 istio-system 命名空间和 pod 上的 topology.istio.io/network 标签,而且该命名空间标签会被两个版本读取。迁移控制平面和更改拓扑是两个独立的变更;请一次只执行一个变更。
与多网络操作步骤的差异
阶段 1和阶段 4与多网络网格相同:Kiali 覆盖每个集群,南北向网关按集群迁移。
阶段 6与多网络网格相同:每个集群获得自己的中间证书,网格使用一个 tracing 索引系列,并将 collector 服务声明为集群本地服务,以便每个代理都向其所在集群的 collector 导出数据。原因有所不同。在此拓扑中,可以访问另一个集群的 collector,因此发送到那里的 span 将正常到达,并且两个 collector 都会写入同一个索引系列——无论采用哪种方式,trace 都是完整的。仅在集群内部导出数据,可以避免无谓地将其跨越集群边界发送。请在任意代理上检查:
一个端点,即本地集群的 collector。
验证
在两个集群中都有工作负载的服务上,从两个版本的代理在共存期间分别检查其远程端点,并在迁移完成后再次检查。工作负载和服务就是跨集群探测中所述的工作负载和服务,TARGET_SERVICE是完全限定名称——短名称与任何 Envoy 集群都不匹配,因此会输出空表:
每个端点都是其中一个集群的 pod 地址。端口为 15443 的地址表示某个控制平面将另一个集群视为独立网络,并正在查找东西向网关:检查两个 Istio 资源的 spec.values.global.network,以及 istio-system 命名空间的标签。
- 跨集群路径在所有版本组合中都双向承载流量:探测报告
OK,并且属于另一个集群的端点上的rq_success会增加。 - 每个集群的
istio-system命名空间在迁移前、迁移期间和迁移后都不带有任何topology.istio.io/network标签。 - 每个
Istio资源的network、meshID和集群名称,都应当与 Mesh v1 中的对应字段逐一相同。
迁移后
网格仍为单网络:Mesh v2 与 Mesh v1 一样支持此拓扑,迁移不会对其产生任何改变。
按照迁移后中的说明,在 Kiali 的流量图中查看迁移后的网格。这里也会分别绘制各个集群,集群之间的边表示使用另一个集群的 pod 地址的调用。