Migration overview

This document explains what changes between Alauda Service Mesh v1 (Mesh v1) and Alauda Service Mesh v2 (Mesh v2), how the migration is phased, and the conventions used throughout this section. Read it before you start.

Applicability
ItemVersion
Alauda Container Platformv4.2, v4.3
SourceAlauda Service Mesh v1, Istio 1.22 (revision 1-22)
TargetAlauda Service Mesh v2.2 (Istio 1.30.4), Alauda Build of Kiali 2.27
Observability targetAlauda Build of OpenTelemetry v2.1, Alauda Distributed Tracing v2.1 (Jaeger 2.20.0)

On Alauda Container Platform 4.1, update the platform to 4.2 or 4.3 first: Mesh v2.2 is not supported on 4.1.

Rehearse the migration in a test environment first

Run the whole migration end to end in a test environment that matches your production mesh — same topology, same gateways, same observability stack — before you migrate a production mesh. Decommissioning Mesh v1 cannot be undone: after that point, going back means reinstalling Mesh v1 from your backups.

Why migrate

Mesh v1 is built on the upstream istio-operator project, which is no longer maintained. Alauda Container Platform 4.4 does not ship Mesh v1, so every Mesh v1 mesh must be migrated while the platform is on 4.2 or 4.3. Mesh v2 is built on the Sail Operator and tracks current Istio releases.

What changes

AreaMesh v1Mesh v2
Control planeIstioOperator resources reconciled by istio-operator, one istiod per revisionIstio and IstioRevision resources reconciled by the Alauda Service Mesh v2 Operator
Traffic captureistio-init init container per podIstioCNI plus a native sidecar container
InjectionNamespace label istio.io/rev and a platform webhook that adds the sidecar settings of each MicroService to the podNamespace label istio.io/rev and the settings written in the workload template
GatewaysGatewayDeploy resources, each rendered into its own IstioOperator resourceGateway injection deployments that you manage yourself, or Gateway API
GovernancePlatform resources such as MicroService, ConnectionPool, LoadBalancer, WhitelistIstio resources such as DestinationRule and AuthorizationPolicy
ObservabilityPlatform tracing console, OpenTelemetry v1 and Jaeger 1.xKiali, Alauda Build of OpenTelemetry v2 and Jaeger v2
ManagementWeb console plus platform resourceskubectl and Istio resources

Istio resources — Gateway, VirtualService, DestinationRule, ServiceEntry, Sidecar, PeerAuthentication, Telemetry and the rest — are reused as they are. The migration changes which control plane programs them, not the resources themselves.

Feature mapping

Mesh v1 featureIn Mesh v2Action before or during the migration
Mesh lifecycle (ServiceMesh, ServiceMeshGroup)Istio and IstioCNI resourcesPhase 2
Microservice onboarding (MicroService)No equivalent; injection is driven by labelsThe sidecar settings of each microservice are written into the workload template in Phase 3
Sidecar injection settings (proxy resources, log level, traffic exclusions)Pod annotations in the workload templatePhase 3
Ingress and egress gateways (GatewayDeploy)Gateway injection deploymentsPhase 4
Traffic policies (ConnectionPool, OutlierDetection, LoadBalancer)The DestinationRule resources these already generateKeep the generated DestinationRule, delete the platform resources with Mesh v1
Security policies (Whitelist, JWTPolicy)AuthorizationPolicy, RequestAuthenticationConvert before Phase 5, then delete the platform resources with Mesh v1
Progressive delivery (CanaryDelivery)Not availableFinish or cancel every running canary before you start
Global rate limiting (GlobalRateLimiter)Not availableStop depending on it before you start
API management and API metrics (APIAttribute)Not availableStop depending on it before you start; the EnvoyFilter resources it generates target Istio 1.22 proxies and stop applying once workloads run on Mesh v2
Instance isolation (IsolatePod)Not availableRelease every isolated pod before you start
Tracing console and topologyJaeger v2 UI and KialiPhase 1 and Phase 6

Migration phases

The migration runs in seven phases. Each phase ends with checks that must pass before you start the next one.

PhaseWhat happensReversible
Phase 0 — PrepareCheck compatibility and capacity, record the Mesh v1 configuration, back up every resource, start traffic probesNothing changes yet
Phase 1 — Prepare observabilityInstall Kiali and the Mesh v2 metrics resourcesYes
Phase 2 — Install the Mesh v2 control planeCreate IstioCNI and Istio next to Mesh v1; no workload changesYes — delete both resources
Phase 3 — Migrate workloadsMove namespaces and workloads to the Mesh v2 revision, one at a timeYes — move them back
Phase 4 — Migrate gatewaysRun a Mesh v2 gateway next to each Mesh v1 gateway and shift trafficYes — shift traffic back
Phase 5 — Decommission Mesh v1Remove the Mesh v1 control plane, operators and platform resources by handNo — recovery means reinstalling Mesh v1 from backups
Phase 6 — Finalize and migrate the observability stackAdopt the default revision tag, hand over the certificate authority, move tracing to OpenTelemetry v2 and Jaeger v2Partially

For a mesh that spans several clusters, follow the single-cluster phases and add the steps in Migrating a multi-cluster mesh. See Rolling back the migration for what each phase can be rolled back to.

Why running both control planes is safe

During Phase 2 to Phase 5 the two control planes share one cluster. Four properties keep them apart:

  • One certificate authority. Mesh v1 stores its intermediate certificate in the cacerts secret of the istio-system namespace, in the format istiod expects. The Mesh v2 istiod runs in the same namespace and loads the same secret, so both sides issue workload certificates from the same root and mutual TLS keeps working across them.
  • Revision isolation. Mesh v1 is itself a revisioned deployment (1-22). Mesh v2 uses the RevisionBased update strategy, so its injection and validation webhooks carry its own revision suffix. The istio.io/rev label selects exactly one control plane per namespace.
  • No shared default. Mesh v1 owns the default webhook slot. Mesh v2 does not create an IstioRevisionTag named default until Mesh v1 is gone.
  • Separate traffic capture. Mesh v1 captures traffic with the istio-init container, Mesh v2 with IstioCNI. The CNI plugin skips pods that already carry istio-init, so pods of both generations run on the same node without interfering.
Never delete the Mesh v1 service mesh from the platform UI

After you create the Mesh v2 Istio resource, never delete the Mesh v1 service mesh from the platform UI, and never delete a ServiceMesh resource and leave the cleanup to the Mesh v1 controllers. The Mesh v1 deletion flow deletes the whole istio-system namespace, including the Mesh v2 control plane that runs in it. Remove Mesh v1 only by following Decommissioning Mesh v1. This rule takes effect in Phase 2.

Conventions

Commands run against the cluster that hosts the mesh. Commands that act on the global cluster pass --context "${GLOBAL_CONTEXT}" explicitly.

Environment-specific values are shell variables. Every page that uses a variable either sets it with a discovery command or points back to the page that does.

VariableMeaningWhere it is set
GLOBAL_CONTEXTkubectl context of the global clusterYou set it
CLUSTER_NAMEName of the cluster in the platform, and the name of its ServiceMesh resourceYou set it
BACKUP_DIRDirectory that holds the backup of the meshYou set it
V1_CONTROL_PLANE_IOPName of the Mesh v1 control plane IstioOperator resourcePreparing for the migration
V1_REVISIONMesh v1 revision, 1-22Preparing for the migration
MESH_ID, TRUST_DOMAIN, NETWORK, V1_AUTO_INJECTMesh identity and injection policy of Mesh v1Preparing for the migration
V1_TRACE_SAMPLINGTrace sampling percentage of Mesh v1Preparing for the migration
V2_REVISIONActive Mesh v2 revision, for example default-v1-30-4Installing the Mesh v2 control plane
MESH_NAMESPACE, WORKLOAD, APP_CONTAINERNamespace, workload and application container a step acts onYou set them per step
MS_NAME, SERVICE_NAMEMesh v1 microservice name and reported service name of an instrumented workloadMigrating the observability stack
CTX_CLUSTER1, CTX_CLUSTER2kubectl contexts of the two clusters of a multi-cluster meshMigrating a multi-cluster mesh
CTXContext of the cluster the current multi-cluster step acts onAddress one cluster at a time
CLIENT, TARGET_APP, TARGET_SERVICE, APP_PORTWorkload and service the cross-cluster checks callThe cross-cluster probe
GATEWAY_NAMESPACE, GATEWAY_NAMENamespace and name of a Mesh v1 gatewayMigrating gateways
GATEWAY_REPLICASReplica count the Mesh v1 gateway had, needed to roll Phase 4 backMigrating gateways