September 5, 2023·4 min read·engineeringistiogateway-apiambient

Istio 1.19 brings Gateway API routing into the mesh

Istio 1.19 implements Gateway API's experimental service-mesh support. The release also expands ambient resource handling while preserving its alpha status.

An API used to expose a service at a cluster's edge can also describe routing between services, but its attachment needs a different parent. Internal mesh traffic does not necessarily enter through a separately deployed Gateway listener. Gateway API's service-mesh work gives routing a way to describe a relationship to the service itself.

The September 5 Istio 1.19 announcement adds service-mesh support alongside Gateway API 0.8.0. It describes multiple conformant implementations, including Istio, and explicitly calls the feature experimental. Ingress use of Gateway API is separately described as beta. Those maturity statements refer to different uses of the API within the same release.

I value a common traffic-policy vocabulary across a fleet, particularly when applications use different languages. Gateway API's mesh work is interesting because it extends a shared Kubernetes interface into service-to-service routing. Its value depends on precise attachment rules and on distinguishing the experimental mesh model from more established ingress behaviour.

A Service parent needs the correct API group

The 1.19 change notes include a concrete compatibility correction. A parentRef with kind: Service must set group: "". Istio previously tolerated omission of the group for this case. Version 1.19 follows the Gateway API requirement and treats the change as breaking.

The following fragment illustrates the parent reference fields involved, without defining a complete route.

parentRefs:
  - group: ""
    kind: Service
    name: backend

The explicit empty group identifies the core Kubernetes Service API. A kind name alone is not the complete identity of a Kubernetes resource type. The correction prevents Istio's previous tolerance from becoming an implementation-specific expectation that differs from the common API.

This is a useful example of compatibility work that can reject a formerly accepted declaration. Common semantics sometimes require removing local permissiveness. A route that happened to work under one controller's interpretation may need to state its target more precisely when the implementation aligns with the shared specification.

The announcement's conformance statement is therefore best read alongside the version and the exact API use. It concerns Gateway API 0.8.0 service-mesh support as described at this date. It does not establish support for every routing feature that might be proposed or released later.

Ambient gains more ways to represent workloads

Istio 1.19 also extends ambient handling of ServiceEntry and WorkloadEntry. The announcement adds PeerAuthentication and DNS proxying to that list. These changes broaden the resource and policy vocabulary available to the new deployment model while ambient remains alpha.

The change notes call the ServiceEntry and WorkloadEntry support initial support. They also add handling for WorkloadEntry resources without an address and fix delivery of ambient WorkloadEntry xDS events when the specification changes. These details matter because recognising a resource at creation is only one part of maintaining its meaning over time.

A control plane needs to carry later updates through to the components consuming its configuration. An entry whose specification changes must trigger the corresponding configuration path. The release's explicit update fix addresses that maintenance behaviour, rather than merely adding a new accepted object type.

Addressless WorkloadEntry resources also support broader virtual-machine and multi-cluster use. The announcement presents the address field becoming optional as a simplification for those environments. That is a specific API change, and it should not be expanded into a claim that every workload can omit its address in every deployment arrangement.

Alpha status still applies to the expanded model

The ambient additions do not graduate ambient in 1.19. The release announcement asks users to try it and provide feedback toward beta. That keeps the operating claim distinct from the growing list of supported resources. More implemented behaviour is progress within the alpha, not evidence of a maturity transition the maintainers have not announced.

This matters when comparing deployment modes. A fleet can continue using sidecars while evaluating whether ambient's separation of transport and Layer 7 processing meets its requirements. Supporting additional policy and workload resources makes that evaluation more representative, while the alpha label still defines the project's readiness statement.

I find that distinction useful when judging mesh complexity. A new architecture needs the surrounding diagnosis and resource-update behaviour as well as a successful traffic demonstration. The release notes expose work on those supporting paths, including proxy status handling that recognises ztunnel is not an Envoy proxy.

The notes exclude ztunnel pods from comparisons against Envoy configuration files and correct a root-CA comparison parsing issue for those pods. Those changes prevent diagnostic commands from applying assumptions appropriate to one data-plane component to a different component. Operating the layered model requires tools to preserve that difference.

Optional client certificates are an explicit gateway policy

The release adds OPTIONAL_MUTUAL to Istio Gateway TLS settings. The announcement describes accepting and validating a client certificate when one is presented. That differs from requiring every connection to supply one, so the mode's optionality is part of its security meaning.

An operator choosing it needs an application or policy interpretation for requests without a certificate. Validation of a supplied credential does not itself establish that every caller authenticated through that credential. The API offers a particular handshake policy whose name should not be abbreviated to a general assertion of required mutual TLS.

The change notes also add configurable cipher suites for non-ISTIO_MUTUAL traffic through MeshConfig. That scope is relevant to understanding the setting. A general statement that the mesh now has a configurable cipher policy would hide which traffic path the new option affects. The release identifies the mode so an operator can connect the setting to its intended TLS configuration instead of assuming it changes every connection uniformly.

Istio 1.19 is officially supported on Kubernetes 1.25 through 1.28. Across that range, the release advances a common routing API and extends ambient's configuration model without merging their maturity labels. The Service parent correction shows the level of precision the shared interface needs, while the ambient diagnostic fixes show the corresponding need to identify which component is actually consuming a configuration.