迁移概述

本文档介绍 Alauda Service Mesh v1(Mesh v1)与 Alauda Service Mesh v2(Mesh v2)之间的变化、迁移阶段以及本节中使用的约定。请在开始前阅读本文档。

适用范围
项目版本
Alauda Container Platformv4.2、v4.3
源Alauda Service Mesh v1、Istio 1.22(修订版本 1-22)
目标Alauda Service Mesh v2.2(Istio 1.30.4)、Alauda Build of Kiali 2.27
可观测性目标Alauda Build of OpenTelemetry v2.1、Alauda Distributed Tracing v2.1(Jaeger 2.20.0)

在 Alauda Container Platform 4.1 上,请先将平台更新到 4.2 或 4.3:Mesh v2.2 不支持 4.1。

请先在测试环境中演练迁移

在迁移生产环境中的 mesh 之前,请先在与生产 mesh 匹配的测试环境中端到端地执行整个迁移过程——使用相同的拓扑、相同的网关和相同的可观测性堆栈。停用 Mesh v1 后无法撤销:此后如需回退,只能根据备份重新安装 Mesh v1。

为什么要迁移

Mesh v1 基于上游 istio-operator 项目构建,该项目已不再维护。Alauda Container Platform 4.4 不再提供 Mesh v1,因此所有 Mesh v1 mesh 都必须在平台处于 4.2 或 4.3 时完成迁移。Mesh v2 基于 Sail Operator 构建,并跟踪当前的 Istio 版本。

有哪些变化

区域Mesh v1Mesh v2
控制平面由 istio-operator 调和的 IstioOperator 资源,每个修订版本对应一个 istiod由 Alauda Service Mesh v2 Operator 调和的 Istio 和 IstioRevision 资源
流量捕获每个 pod 一个 istio-init init 容器IstioCNI 加上一个原生 sidecar 容器
注入命名空间标签 istio.io/rev,以及一个平台 webhook,该 webhook 会将每个 MicroService 的 sidecar 设置添加到 pod命名空间标签 istio.io/rev,以及写入工作负载模板的设置
网关GatewayDeploy 资源,每个资源分别渲染为其自身的 IstioOperator 资源由你自行管理的网关注入 deployment,或 Gateway API
治理MicroService、ConnectionPool、LoadBalancer、Whitelist 等平台资源DestinationRule 和 AuthorizationPolicy 等 Istio 资源
可观测性平台链路追踪控制台、OpenTelemetry v1 和 Jaeger 1.xKiali、Alauda Build of OpenTelemetry v2 和 Jaeger v2
管理Web 控制台和平台资源kubectl 和 Istio 资源

Istio 资源(Gateway、VirtualService、DestinationRule、ServiceEntry、Sidecar、PeerAuthentication、Telemetry 以及其他资源)会原样复用。迁移改变的是为这些资源编程的控制平面,而不是资源本身。

功能映射

Mesh v1 功能在 Mesh v2 中迁移之前或迁移期间的操作
Mesh 生命周期(ServiceMesh、ServiceMeshGroup)Istio 和 IstioCNI 资源阶段 2
微服务接入(MicroService)无对应项;注入由标签驱动在阶段 3 中,将每个微服务的 sidecar 设置写入工作负载模板
Sidecar 注入设置(代理资源、日志级别、流量排除)工作负载模板中的 Pod 注解阶段 3
Ingress 和 egress 网关(GatewayDeploy)网关注入 deployment阶段 4
流量策略(ConnectionPool、OutlierDetection、LoadBalancer)这些策略已生成的 DestinationRule 资源保留生成的 DestinationRule,删除 Mesh v1 的平台资源
安全策略(Whitelist、JWTPolicy)AuthorizationPolicy、RequestAuthentication在阶段 5 之前进行转换,然后删除 Mesh v1 的平台资源
渐进式交付(CanaryDelivery)不可用开始迁移前,完成或取消所有正在运行的金丝雀发布
全局速率限制(GlobalRateLimiter)不可用开始迁移前,停止依赖此功能
API 管理和 API 指标(APIAttribute)不可用开始迁移前,停止依赖此功能;它生成的 EnvoyFilter 资源面向 Istio 1.22 代理,并会在工作负载运行于 Mesh v2 后停止应用
实例隔离(IsolatePod)不可用开始迁移前,释放所有已隔离的 pod
链路追踪控制台和拓扑Jaeger v2 UI 和 Kiali阶段 1 和阶段 6

迁移阶段

迁移分为七个阶段。每个阶段结束时都必须通过检查,才能开始下一阶段。

阶段操作是否可逆
阶段 0 — 准备检查兼容性和容量,记录 Mesh v1 配置,备份每个资源,启动流量探针尚未发生任何更改
阶段 1 — 准备可观测性安装 Kiali 和 Mesh v2 指标资源是
阶段 2 — 安装 Mesh v2 控制平面在 Mesh v1 旁边创建 IstioCNI 和 Istio;不更改工作负载是 — 删除这两个资源
阶段 3 — 迁移工作负载将命名空间和工作负载逐一迁移到 Mesh v2 修订版本是 — 将其迁回
阶段 4 — 迁移网关在每个 Mesh v1 网关旁运行一个 Mesh v2 网关,并切换流量是 — 切回流量
阶段 5 — 停用 Mesh v1手动移除 Mesh v1 控制平面、operator 和平台资源否 — 恢复意味着从备份重新安装 Mesh v1
阶段 6 — 完成并迁移可观测性堆栈采用默认修订版本标签,移交证书颁发机构,将链路追踪迁移到 OpenTelemetry v2 和 Jaeger v2部分可逆

对于跨越多个集群的 mesh,请遵循单集群阶段,并添加迁移多集群 mesh中的步骤。有关每个阶段可以回滚到的状态,请参阅回滚迁移。

为什么同时运行两个控制平面是安全的

在阶段 2到阶段 5期间,两个控制平面共享一个集群。以下四个特性使它们彼此隔离:

  • 同一个证书颁发机构。Mesh v1 将其中间证书以 istiod 所需的格式存储在 istio-system 命名空间的 cacerts secret 中。Mesh v2 istiod 在同一命名空间中运行并加载同一个 secret,因此双方都从同一个根证书颁发工作负载证书,双向 TLS 可以在两者之间正常工作。
  • 修订版本隔离。Mesh v1 本身是一个基于修订版本的部署(1-22)。Mesh v2 使用 RevisionBased 更新策略,因此其注入和验证 webhook 都带有自身的修订版本后缀。istio.io/rev 标签会为每个命名空间准确选择一个控制平面。
  • 不共享默认值。Mesh v1 占用 default webhook 槽位。Mesh v2 不会创建名为 default 的 IstioRevisionTag,直到 Mesh v1 被移除。
  • 独立的流量捕获。Mesh v1 使用 istio-init 容器捕获流量,Mesh v2 使用 IstioCNI。CNI 插件会跳过已带有 istio-init 的 pod,因此两个版本的 pod 可以在同一节点上运行而不会相互干扰。
切勿从平台 UI 中删除 Mesh v1 service mesh

创建 Mesh v2 Istio 资源后,切勿从平台 UI 中删除 Mesh v1 service mesh,也不要删除 ServiceMesh 资源并将清理工作留给 Mesh v1 控制器。 Mesh v1 的删除流程会删除整个 istio-system 命名空间,包括其中运行的 Mesh v2 控制平面。只能按照停用 Mesh v1中的步骤移除 Mesh v1。此规则从阶段 2开始生效。

约定

针对承载 mesh 的集群运行命令。针对 global 集群执行操作的命令会显式传递 --context "${GLOBAL_CONTEXT}"。

特定于环境的值是 shell 变量。使用变量的每个页面都会通过发现命令设置该变量,或指向执行设置的页面。

变量含义设置位置
GLOBAL_CONTEXTglobal 集群的 kubectl 上下文由你设置
CLUSTER_NAME平台中的集群名称,以及其 ServiceMesh 资源的名称由你设置
BACKUP_DIR存放 mesh 备份的目录由你设置
V1_CONTROL_PLANE_IOPMesh v1 控制平面 IstioOperator 资源的名称准备迁移
V1_REVISIONMesh v1 修订版本,1-22准备迁移
MESH_ID、TRUST_DOMAIN、NETWORK、V1_AUTO_INJECTMesh v1 的 mesh 身份和注入策略准备迁移
V1_TRACE_SAMPLINGMesh v1 的追踪采样百分比准备迁移
V2_REVISION活动的 Mesh v2 修订版本,例如 default-v1-30-4安装 Mesh v2 控制平面
MESH_NAMESPACE、WORKLOAD、APP_CONTAINER步骤所操作的命名空间、工作负载和应用容器每个步骤分别设置
MS_NAME、SERVICE_NAMEMesh v1 微服务名称和已检测工作负载上报的服务名称迁移可观测性堆栈
CTX_CLUSTER1、CTX_CLUSTER2多集群 mesh 中两个集群的 kubectl 上下文迁移多集群 mesh
CTX当前多集群步骤所操作集群的上下文一次处理一个集群
CLIENT、TARGET_APP、TARGET_SERVICE、APP_PORT跨集群检查所调用的工作负载和服务跨集群探针
GATEWAY_NAMESPACE、GATEWAY_NAMEMesh v1 网关的命名空间和名称迁移网关
GATEWAY_REPLICASMesh v1 网关原有的从节点数量,回滚阶段 4时需要迁移网关