✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Ingress and Gateway Migration

Kubernetes Ingress and Gateway Migration moves from legacy ingress to native gateways, improving scalability and service mesh integration.

Kubernetes Ingress and Gateway Migration refers to the process of transitioning an application's external or internal routing configuration from Ingress resources to the Gateway API's Gateway and Route resources, including translation of equivalent semantics, coordination of coexistence during the transition period, and eventual decommissioning of the original Ingress configuration.


Migration Motivations

Outgrowing Ingress's Expressiveness

Teams typically initiate migration when annotation-driven behavior, traffic splitting, request mirroring, or multi-protocol routing needs exceed what the core Ingress API can express natively, since Gateway API provides first-class, portable support for these capabilities rather than requiring controller-specific extensions.

Multi-Tenant Ownership Requirements

Clusters adopting a shared platform model with distinct infrastructure and application team responsibilities often migrate specifically to take advantage of Gateway API's explicit ownership separation between Gateway and Route resources, which the single-resource Ingress model does not cleanly support.


Translation Mapping

Host and Path Rules to HTTPRoute Matches

An Ingress rule's host and path combination maps directly to an HTTPRoute's hostnames field and a corresponding path match within a rule, and migration at this level is largely mechanical, though path type semantics should be verified carefully since subtle differences in prefix matching behavior between the two APIs can exist depending on the specific controller.

Annotations to Native Fields

Controller-specific annotations used for rewrites, redirects, or header manipulation under Ingress typically map to native HTTPRoute filters under Gateway API, and migration requires identifying every annotation in use and finding its Gateway API equivalent individually, since there is no automatic or guaranteed one-to-one mapping across all controller-specific annotation vocabularies.

Ingress host/path rule HTTPRoute match Rewrite annotation URLRewrite filter IngressClass GatewayClass

Coexistence Strategy

Running Both APIs in Parallel

Because a full cluster-wide cutover carries significant risk, migration is typically executed application by application, with the original Ingress resource left in place and functioning while a parallel Gateway and Route configuration is built and validated for the same application, ensuring the old path remains a safe fallback throughout.

Traffic Cutover Approaches

Once the Gateway-based configuration is validated, cutover can happen either by updating DNS to point at the new Gateway's address, or, where both are exposed simultaneously, by directly comparing behavior before removing the Ingress resource, with migration practice favoring a period of side-by-side validation before the old configuration is decommissioned.


Validation Before Decommissioning

Behavioral Equivalence Testing

Migration management includes systematically testing that the new Route configuration produces identical routing outcomes, correct backend selection, correct filter behavior, correct TLS termination, to the original Ingress before removing it, since subtle differences discovered only after decommissioning are considerably more disruptive to resolve.

Monitoring During the Transition Window

During the period where both configurations could theoretically be active, migration practice includes monitoring which path is actually serving live traffic, avoiding a scenario where both the old Ingress and new Gateway configuration are simultaneously routing traffic in ways that could conflict or produce inconsistent behavior for different clients.


Full Cluster Migration Considerations

Sequencing Across Many Applications

For clusters with a large number of Ingress resources, migration is generally sequenced by application risk and complexity, starting with lower-risk, simpler applications to validate the overall migration process and tooling before tackling applications with more complex annotation-driven behavior that requires more careful translation.