迁移概述
本文档介绍 Alauda Service Mesh v1(Mesh v1)与 Alauda Service Mesh v2(Mesh v2)之间的变化、迁移阶段以及本节中使用的约定。请在开始前阅读本文档。
在 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 版本。
有哪些变化
Istio 资源(Gateway、VirtualService、DestinationRule、ServiceEntry、Sidecar、PeerAuthentication、Telemetry 以及其他资源)会原样复用。迁移改变的是为这些资源编程的控制平面,而不是资源本身。
功能映射
迁移阶段
迁移分为七个阶段。每个阶段结束时都必须通过检查,才能开始下一阶段。
对于跨越多个集群的 mesh,请遵循单集群阶段,并添加迁移多集群 mesh中的步骤。有关每个阶段可以回滚到的状态,请参阅回滚迁移。
为什么同时运行两个控制平面是安全的
在阶段 2到阶段 5期间,两个控制平面共享一个集群。以下四个特性使它们彼此隔离:
- 同一个证书颁发机构。Mesh v1 将其中间证书以
istiod所需的格式存储在istio-system命名空间的cacertssecret 中。Mesh v2istiod在同一命名空间中运行并加载同一个 secret,因此双方都从同一个根证书颁发工作负载证书,双向 TLS 可以在两者之间正常工作。 - 修订版本隔离。Mesh v1 本身是一个基于修订版本的部署(
1-22)。Mesh v2 使用RevisionBased更新策略,因此其注入和验证 webhook 都带有自身的修订版本后缀。istio.io/rev标签会为每个命名空间准确选择一个控制平面。 - 不共享默认值。Mesh v1 占用
defaultwebhook 槽位。Mesh v2 不会创建名为default的IstioRevisionTag,直到 Mesh v1 被移除。 - 独立的流量捕获。Mesh v1 使用
istio-init容器捕获流量,Mesh v2 使用IstioCNI。CNI 插件会跳过已带有istio-init的 pod,因此两个版本的 pod 可以在同一节点上运行而不会相互干扰。
创建 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 变量。使用变量的每个页面都会通过发现命令设置该变量,或指向执行设置的页面。