February 14, 2023·6 min read·engineeringistioupgradesrevisions

Istio 1.17 makes revision-based upgrades a supported operating model

Canary upgrades, revision tags, and Helm installation reach beta in Istio 1.17. Their graduation recognises the testing and documentation needed to operate multiple control planes deliberately.

Upgrading a service mesh requires choosing which control plane supplies configuration to each workload. Replacing that control plane for every workload at once couples the upgrade decision to the whole mesh. Istio's revision model provides another approach, allowing multiple control planes to run alongside each other while workloads move between them gradually.

Istio 1.17, released on February 14, promotes canary upgrades and revision tags to beta. The announcement says basic revision-based canary support arrived in 1.6 and revision tags followed in 1.10. This release recognises their maturity after completion of integration tests and documentation-focused end-to-end coverage. Helm installation also reaches beta.

I regard the cost of running another distributed system as the main qualification on Istio's value. An upgrade model that lets operators choose the migration scope addresses part of that cost directly. It creates a way to separate installing a new control plane from moving every application to it.

Revisions separate installation from migration

The announcement describes running several control planes side by side without disturbing the existing deployment, then slowly moving workloads from the old revision to the new one. That creates an explicit intermediate state. A new control plane can exist while the old one continues serving workloads that have not moved.

This is more useful than describing an upgrade solely as a version replacement. The installation step establishes another configuration source. Workload migration decides where that source is consumed. Those operations can happen at different times, giving the operator a defined scope for each stage.

The architecture also changes what an inventory needs to explain. Knowing that the cluster contains a new Istio control plane does not establish that every workload uses it. A mesh can intentionally contain more than one revision during migration. Describing that state as an incomplete installation would misunderstand the operating model the feature supports.

Revision tags reduce the configuration changes needed to use revisions. The release announcement presents them as an improvement to canary upgrades. A useful way to understand the benefit is that a maintained selection can represent the operator's intended revision relationship without every consumer needing to encode each underlying version transition directly.

Beta graduation is therefore about a workflow that users already adopted. The authors explicitly describe wide production use. Completion of integration and end-to-end tests provides the release's stated evidence for promoting it. That evidence is more specific than a general claim that the upgrade model has existed for a long time.

Revision awareness reaches diagnostic commands

The 1.17 change notes add revision selection to operational commands. istioctl analyze gains --revision, and istioctl admin log gains a revision flag for choosing among Istiod instances. These changes make the multi-control-plane model visible in diagnosis as well as installation.

A diagnostic aimed at the wrong revision can examine a different configuration source from the one under investigation. Revision selection gives the operator a way to specify the relevant target instead of relying on an implicit default. That follows naturally once running multiple control planes is an ordinary supported state.

The notes also identify fixes involving the default revision. Installation with --revision default and verification with and without an explicit default selection had inconsistent behaviour. Correcting those paths matters because an explicit target and the command's default should not accidentally produce contradictory interpretations of the installation.

Another fix concerns mutating webhooks when setting several revision tags. The notes say those webhooks were not being split correctly. The release does not merely announce a higher maturity label. It includes corrections in the machinery used to connect workload injection and revision selection.

These are details of the operator's model of the mesh. A revision has to be selectable in diagnostics, installable through the expected commands, and represented correctly in injection configuration. The feature's maturity depends on that surrounding behaviour, because a control-plane split that cannot be inspected consistently is harder to operate safely.

Helm graduation covers the lifecycle around the charts

Helm installation first appeared in Istio 0.4, according to the announcement. In 1.17 it reaches beta after work that includes using charts in integration install and upgrade tests. The authors also cite improved Helm integration testing and documentation of advanced chart customisation and values.yaml attributes.

That is a useful distinction between providing a chart and maintaining an installation method. A chart can render a plausible deployment while leaving upgrades, custom values, or interactions between components underexamined. The graduation criteria named by the project concern those operating paths, not simply whether Helm can produce Kubernetes objects.

The change notes include fixes for gateway image-pull policy values and add support for explicitly setting a gateway deployment's imagePullPolicy. They also add support for allowing certificate-signing request signers through Helm installation. These are examples of configuration requirements that matter when charts form part of a maintained installation workflow.

I prefer installation methods whose customisation points receive the same attention as their default output. A platform rarely remains on an untouched demonstration configuration. Documenting and testing supported values makes it easier to distinguish an intended option from an accidental consequence of the templates.

Dual stack remains a separate experiment

The announcement places dual-stack work at an experimental stage under active development. It describes services with IPv4-only, IPv6-only, and dual-stack address families communicating through sidecars on a dual-stack cluster. It also adds source-address configuration for automatically deployed gateway listeners so external IPv4 and IPv6 clients can reach them.

That qualification matters alongside the beta upgrade features. Istio 1.17 contains capabilities with different maturity levels. The production-readiness signal attached to canary upgrades does not automatically apply to the new dual-stack behaviour. A release number is not a substitute for the feature's own maturity statement.

The gateway listener scope is also specific. The announcement applies that change to gateways automatically deployed by the gateway controller. It does not describe one universal configuration step for every possible gateway deployment. Understanding the deployment path is part of understanding which behaviour the release changes.

These details make the event more than a statement that Istio now supports another address family. The mesh must represent service addresses and configure the listeners that accept traffic. Each is a different point where a dual-stack Kubernetes environment needs corresponding mesh behaviour.

Gateway API support has a concrete version

Istio's Gateway API implementation moves to version 0.6.1 in this release. The announcement says it is fully compliant with that version. That gives the integration a specific compatibility target at this date, which is more useful than describing it as support for an indefinitely current Gateway API.

The change notes also modify naming of automatically deployed gateway resources. Names combine the Gateway's name and GatewayClass name, and the deployment receives its own ServiceAccount instead of using the default account. Deployment, Service, and ServiceAccount naming are all affected. Those are observable changes for operators integrating the generated resources into their environment.

Moving to a separate service account makes the generated deployment's identity explicit. That fits the broader reason to use a mesh identity model, while remaining an installation detail with its own configuration consequences. Generated infrastructure needs a stable explanation of its identity just as application workloads do.

Istio 1.17 is officially supported on Kubernetes 1.23 through 1.26. Within that compatibility range, the release advances different parts of the operating model at different speeds. Revision-based migration and Helm gain beta status, while dual-stack support remains experimental and Gateway API support names a particular upstream version. Those distinctions let an operator connect each adoption decision to the behaviour and maintenance commitment actually announced.

Telemetry customisation also changes implementation

The change notes move Prometheus statistics in the Telemetry API to a native extension instead of the Wasm-based extension. They say custom dimensions no longer require regex and bootstrap annotations. They also warn that customisations using CEL expressions with Wasm attributes are likely to be affected.

That is another reason the upgrade needs a configuration-level description. An operator can retain the same general goal of adding metric dimensions while depending on attributes associated with the previous implementation. The documented change identifies that dependency without implying that every Telemetry resource requires rewriting.

The release adds an analyser for Telemetry resources as well. Together with revision selection in diagnostics, that expands the tools available to inspect a configured mesh while its components and extension implementations change.