迁移单网络网格

单网络网格中的集群共享一个扁平的 pod 网络。代理通过另一个集群中工作负载的 pod 地址访问该工作负载,且网格没有东西向网关。本文档列出了与迁移多网络网格的差异;其他所有内容都与迁移单集群网格相同,只需按集群分别执行。

请先确认拓扑,参见确定网络拓扑。

以下代码块针对一个集群执行,并将其指定为 ${CTX}。在执行第一个代码块前设置该值,并在处理下一个集群时重新设置,参见一次处理一个集群:

export CTX="${CTX_CLUSTER1}"
切勿在迁移期间更改网络拓扑

在整个迁移过程中,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 标签,而且该命名空间标签会被两个版本读取。迁移控制平面和更改拓扑是两个独立的变更;请一次只执行一个变更。

与多网络操作步骤的差异

阶段多网络单网络
阶段 0记录每个集群的网格标识和东西向网关执行相同操作,并确认一个集群中的 pod 可以直接访问另一个集群中的 pod;network 在每个集群中具有相同的值,并且没有需要记录或备份的东西向网关
阶段 2每个 Istio 资源都携带其所在集群的 network使用从 Mesh v1 记录的 network,该值在每个集群中都相同。远程 Secret 按原样复用,与多网络网格完全相同
阶段 2(之后)为每个集群部署一个 Mesh v2 东西向网关跳过:网格没有东西向网关
阶段 3每个命名空间之后检查跨集群端点执行相同检查,并额外确认远程端点仍为 pod 地址
阶段 5在删除 Mesh v1 控制平面之前,分离东西向网关服务不适用。南北向网关服务按照单集群网格中的方式进行分离

阶段 1和阶段 4与多网络网格相同:Kiali 覆盖每个集群,南北向网关按集群迁移。

阶段 6与多网络网格相同:每个集群获得自己的中间证书,网格使用一个 tracing 索引系列,并将 collector 服务声明为集群本地服务,以便每个代理都向其所在集群的 collector 导出数据。原因有所不同。在此拓扑中,可以访问另一个集群的 collector,因此发送到那里的 span 将正常到达,并且两个 collector 都会写入同一个索引系列——无论采用哪种方式,trace 都是完整的。仅在集群内部导出数据,可以避免无谓地将其跨越集群边界发送。请在任意代理上检查:

istioctl --context "${CTX}" proxy-config endpoint "deploy/${WORKLOAD}.${MESH_NAMESPACE}" \
  --cluster "outbound|4317||otel-collector.jaeger-system.svc.cluster.local"

一个端点,即本地集群的 collector。

验证

在两个集群中都有工作负载的服务上,从两个版本的代理在共存期间分别检查其远程端点,并在迁移完成后再次检查。工作负载和服务就是跨集群探测中所述的工作负载和服务,TARGET_SERVICE是完全限定名称——短名称与任何 Envoy 集群都不匹配,因此会输出空表:

istioctl --context "${CTX}" proxy-config endpoint "deploy/${CLIENT}.${MESH_NAMESPACE}" \
  --cluster "outbound|${APP_PORT}||${TARGET_SERVICE}"

每个端点都是其中一个集群的 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 地址的调用。