November 18, 2021·6 min read·engineeringistiowasmtelemetry

Istio 1.12 adds dedicated APIs for proxy extensions and telemetry

WasmPlugin gives Istio a first-class alpha API for deploying WebAssembly filters. Expanded Telemetry configuration, refined Helm charts, and Gateway API support continue the effort to replace fragile low-level configuration.

Low-level Envoy configuration can express behavior that Istio's higher-level APIs do not yet cover, but it ties an operator to details of the generated proxy configuration. Istio 1.12 adds WasmPlugin as a dedicated API for WebAssembly extensions and expands its Telemetry API. Both remain alpha.

The 18 November release announcement describes these changes as improvements to configuration that had been experimental or difficult to use. The release also refines Helm installation and supports Kubernetes Gateway API v1alpha2.

I value common mesh configuration when it removes repeated application work. That value decreases when ordinary operations require matching the control plane's internal Envoy structures. A dedicated API can express the intended extension directly, although its alpha status still limits the stability promise.

WasmPlugin describes an extension as an Istio resource

The 1.12.0 WasmPlugin definition describes filters that extend Istio proxy behavior. A resource selects workloads, locates a module, and supplies plugin configuration.

The URL can reference an OCI image, an HTTP or HTTPS module, or a file already present in the proxy container. Without an explicit scheme, the API defaults to an OCI reference. These are different distribution arrangements behind the same extension resource.

A local-file reference assumes the proxy container already contains the module. A remote reference introduces retrieval as part of deployment. The API makes that location explicit instead of requiring an operator to encode all of the configuration through a general-purpose Envoy patch.

The selector also has scope. Without a selector, the configuration applies to workload instances in its namespace. A resource in the configuration root namespace can apply to workloads across namespaces under the definition's rules.

That scope is consequential because extension code participates in request handling. A missing selector can broaden deployment beyond one intended proxy. The resource's namespace is therefore part of the extension's operating configuration, not merely a place to store its YAML.

Phase and priority express the execution relationship

A filter's position matters when it consumes information another filter creates. The API provides a phase and priority so that extensions can be placed relative to Istio's own authentication, authorization, and statistics filters.

The authentication phase precedes Istio authentication filters. Its authorization phase follows authentication and precedes Istio authorization. Statistics extensions follow authorization and precede Istio statistics processing.

The definition also provides an unspecified phase for the control plane to choose placement, generally before the router near the end of the chain. An independent plugin need not pretend to have an authentication dependency merely to obtain a position.

Within one phase, higher priorities run before lower ones. Equal or unspecified priorities use deterministic ordering based on resource name and namespace. If a plugin depends on another plugin's result, an explicit ordering is easier to understand than an accidental relationship between names.

This is the sort of intent a dedicated resource can make visible. An operator can describe that an extension prepares authentication input before Istio verifies it, without identifying a generated filter-chain fragment by its internal name.

The API definition uses a hypothetical OpenID flow to illustrate that relationship. Its examples describe custom plugin behavior, not a built-in promise that Istio ships an arbitrary complete identity integration. The resource deploys code; the code still needs to implement the claimed behavior.

Artifact identity remains distinct from plugin configuration

The definition separates the module URL from the configuration passed into the plugin. This lets a deployment change extension settings without describing those settings as a different kind of proxy resource.

It also includes checksum and OCI pull-policy fields. Pull behavior applies to tagged OCI references, while a digest reference identifies a specific artifact. A configuration review needs to distinguish an artifact's location from the identity of its contents.

These are relevant controls for operating remotely distributed code. A tag can identify a deployment convention, while a digest identifies particular bytes. The fact that the configuration is declarative does not make those references equivalent.

The definition also declares a field for a same-namespace Kubernetes Secret holding registry credentials. A declared field alone does not establish that retrieval support is implemented. Schema review needs to remain separate from checking the released implementation, especially while the API is alpha.

The release explicitly calls WasmPlugin alpha and evolving. The fields supply a more direct representation of extension deployment, but users still need to account for API changes and the behavior of the plugin itself.

Telemetry configuration covers more operating needs

The release announcement describes the Telemetry API as a standardized way to configure tracing, logging, and metrics. In 1.12, it expands support for metrics and access logging.

That is a separate use of the same higher-level approach. Operators need a supported place to describe observability behavior without treating every setting as a low-level proxy customization. The API remains alpha, so standardization of the representation is still ongoing.

The announcement describes the Telemetry API as introduced in 1.11, while its earlier release history included experimental work. The useful current fact is the capability and status in 1.12, rather than assigning every part of that development to a single earlier milestone.

Metrics and access logs also have different consumers and costs. A shared configuration API does not make them interchangeable. It provides a common administrative mechanism for choices that still need to match the workload's operational requirements.

My preference is to put repeated fleet-wide observability choices in a resource that states those choices directly. Keeping them in an evolving dedicated API is easier to reason about than implying that any patch to generated Envoy configuration has a stable meaning across upgrades.

Helm installation gains a clearer distribution path

Istio 1.12 publishes an official Helm repository and a refined gateway chart. The new gateway chart replaces the separate ingress-gateway and egress-gateway charts.

The announcement links this work to a future beta graduation for Helm support. It does not announce that graduation as already complete. A more accessible chart repository and an improved chart structure are the current improvements.

The gateway chart also connects to gateway injection introduced in the prior release. Separating a gateway's workload deployment from the proxy configuration supplied through injection reduces a distinct configuration path that otherwise needs to remain synchronized.

This matters when several gateways exist for different purposes. A common chart and injection mechanism can reduce duplication, while each gateway's placement and exposed Services remain deliberate Kubernetes choices.

The change notes also fix a manifest-merging bug involving the same port number with different TCP and UDP protocols. Installation correctness includes preserving those distinctions, not merely producing YAML that looks complete.

Gateway API support is still an evolving integration

The release adds support for Kubernetes Gateway API v1alpha2. The announcement describes a common routing configuration effort across Istio, Kubernetes Ingress, and other proxies.

It also says the API is not yet targeted at production workloads. Supporting the current alpha version is useful for development and evaluation, but it is not a statement that every established Istio routing feature now has a stable portable equivalent.

The change notes include a correction for routes whose backend weight is zero. That detail illustrates why implementation behavior matters alongside schema support. A route can be represented by the API while its forwarding outcome still requires correct interpretation.

Experimental HTTP/3 gateway support also appears in the release. It is another capability with its own status, which should not inherit a stronger readiness claim from the presence of established gateway functionality elsewhere.

Traffic and security continue to acquire explicit controls

The release adds default retry policy configuration in MeshConfig, avoiding repetition of the same default across VirtualServices. It also adds failoverPriority, an ordered list of endpoint labels used to establish load-balancing priority.

The change notes extend consistent-hash configuration to proxyless gRPC clients. That is a concrete advance beyond the initially narrower support described for proxyless integration. It does not establish parity with every Envoy feature.

External authorization advances from experimental to alpha. Another security option lets istiod configure verification of server certificates using the operating system's CA certificates when a DestinationRule omits its own CA-certificate field.

These changes continue to give common operating decisions an identified configuration mechanism. Their presence does not remove the need to read defaults and maturity status for each one.

Istio 1.12 supports Kubernetes 1.19 through 1.22. Its dedicated WasmPlugin and expanded Telemetry APIs give extension deployment and observability settings their own resources, while retaining explicit alpha status. Operators can express those intentions more directly and keep their remaining low-level customizations tied to the generated configuration they actually depend upon.