Ingress-NGINX Is Retired: What Kubernetes Teams Should Do Next

Ingress-NGINX was retired in March 2026. Existing installations still work, but they no longer receive fixes. Here is how to plan a safe migration without confusing the controller, the Ingress API and Gateway API.

Read in: English · తెలుగు · हिन्दी

Three boxes: retired Ingress-NGINX, Inventory & capture, and Gateway API, connected left to right by arrows

Your ingress controller may still be routing traffic normally, but the project protecting it has stopped. Migration requires more than converting YAML.

It still works—which is why this is easy to postpone

Your Kubernetes applications are responding normally. TLS certificates renew. Routes still send traffic to the correct Services. Nothing on the dashboard says that your ingress layer has expired.

But if those routes depend on the Kubernetes community’s Ingress-NGINX controller, the software is now retired. The project repository was archived on 24 March 2026. There will be no more releases, bug fixes or security patches.

Existing installations were not remotely disabled. Images and Helm charts remain available. That is useful for operational continuity, but it also creates a dangerous impression: because the controller still runs, migration can wait.

The risk is not an immediate shutdown. It is continuing to place internet traffic through a component whose maintainers will no longer fix the next vulnerability.

First, separate three things that sound similar

The retirement announcement is easy to misread because Kubernetes networking uses several similar names.

NameWhat it isCurrent position
Ingress APIA stable Kubernetes resource for describing basic HTTP and HTTPS routingNot retired or deprecated
Ingress-NGINXThe Kubernetes-community controller that turns Ingress resources and NGINX-specific annotations into running proxy configurationRetired on 24 March 2026
NGINX Ingress ControllerA separate controller maintained by F5A different product; not covered by the Kubernetes retirement
Gateway APIA newer set of Kubernetes networking resources and conformance rulesThe recommended direction for new designs and many migrations

An Ingress resource is only a declaration. A controller reads that declaration and configures the actual traffic-handling software. Retiring one controller does not remove the Ingress API from Kubernetes.

Gateway API also does not give you a controller by itself. It defines resources such as GatewayClass, Gateway and HTTPRoute. You must still choose an implementation that supports the features and operating model you need.

Why replacing the YAML is not enough

Ingress-NGINX began with the relatively small Ingress API, then accumulated years of controller-specific behaviour through annotations, ConfigMaps and custom resources.

Two clusters may contain similar-looking Ingress resources but behave differently because of settings such as:

  • path rewrites and regular expressions;
  • request and connection timeouts;
  • maximum request-body size;
  • HTTP-to-HTTPS redirects;
  • source-IP handling;
  • authentication and rate limits;
  • custom NGINX configuration snippets;
  • TLS passthrough and certificate placement.

Some of these have standard Gateway API equivalents. Some require implementation-specific policy resources. Others should be reconsidered rather than copied.

For example, the Kubernetes migration guidance warns that Ingress-NGINX regular-expression matches can be case-insensitive prefix matches. A mechanically translated route may therefore accept different paths unless the team tests the actual behaviour. Body-size limits, URL normalization and custom configuration snippets can also lack a portable one-to-one mapping.

The object being migrated is not the manifest. It is the traffic behaviour.

A safe Ingress-NGINX migration path A six-stage path moves from an existing retired Ingress-NGINX deployment through inventory, behaviour capture, target selection, assisted translation, parallel validation and controlled cutover. Migrate the behaviour, not only the YAML Retired Ingress-NGINXStill routes traffic; no future fixes 1. InventoryClusters, routes, annotations, integrations 2. Capture behaviourRoutes, redirects, TLS, limits, failures 3. Choose targetController, conformance, policies, ownership 4. Translate and reviewUse Ingress2Gateway; resolve every warning 5. Run in parallelCompare behaviour and failure paths 6. Shift traffic, observe, then removeGradual cutover · tested rollback · uninstall old controller
Figure 1. Treat conversion as the middle of the migration, not the beginning or the end.

Gateway API is a direction, not a product choice

Gateway API improves several limitations of the original Ingress model. It separates infrastructure ownership from application routing, provides a clearer permission model for shared clusters and supports richer routing without placing every extension inside annotations.

That does not make every Gateway API implementation equivalent. Implementations can support different route types, optional features and policy extensions. The Gateway API project publishes conformance results, but conformance can apply to a particular profile and route type rather than every possible feature.

Before selecting a controller, compare what your workloads require:

RequirementQuestion to verify
HTTP routingDoes the implementation pass current Gateway + HTTPRoute conformance?
TLSWhere are certificates stored, and does TLS terminate or pass through?
AuthenticationIs it standard, an implementation-specific policy or an external service?
Traffic policyHow are timeouts, retries, body limits and rate limits expressed?
Multi-team ownershipCan platform and application teams manage separate resources safely?
OperationsHow are upgrades, logs, metrics, tracing and rollback handled?
PortabilityWhich parts of the design depend on one controller’s extensions?

The correct target might be a managed cloud Gateway controller, Envoy Gateway, Traefik, Istio or another conformant implementation. It could also be another maintained Ingress controller when an immediate Gateway API migration is not realistic. The retirement tells you to leave unsupported software; it does not make the same destination correct for every cluster.

A safer migration sequence

1. Find where Ingress-NGINX is actually used

Inventory clusters, controller versions, Helm releases, IngressClass objects, Ingress resources, annotations, ConfigMaps, snippets, TCP/UDP exposure and integrations such as cert-manager or ExternalDNS. Include non-production and disaster-recovery clusters; forgotten clusters are often the last to be migrated.

2. Record behaviour before selecting the replacement

For each important route, capture hosts, paths, redirects, headers, authentication, timeouts, body limits, TLS behaviour and failure responses. Add tests for this behaviour. Configuration alone may not reveal defaults introduced by the controller.

3. Choose the target implementation

Decide whether the immediate goal is another maintained Ingress controller or a Gateway API implementation. Evaluate conformance, platform support, extensions, operational ownership and the cost of changing behaviour.

4. Use Ingress2Gateway as an assistant

The Kubernetes SIG Network’s Ingress2Gateway 1.0 can translate common Ingress-NGINX annotations and warn about configuration it cannot represent. It supports more than 30 common annotations and tests translations against real controllers.

Its own documentation is explicit: it is a migration assistant, not a one-shot replacement. Treat every warning as unresolved work. Do not discard warnings simply because valid Gateway API YAML was generated.

5. Run both paths and compare results

Deploy the new controller and routes beside the existing path. Test normal traffic, failure cases, large requests, redirects, long-running requests, client IPs and certificate behaviour. Then move traffic gradually using weighted DNS, load-balancer controls or supported traffic splitting.

Keep a tested rollback path until the new route has survived real traffic and an appropriate observation period.

6. Remove the old controller completely

After cutover, remove old Ingress resources, admission components, controller workloads, service accounts, cluster roles, ConfigMaps, Services and load balancers. Leaving an unused internet-facing controller installed preserves attack surface and operational confusion.

What should teams do this week?

Do not begin by installing a fashionable replacement. Begin with evidence.

Run an inventory across every cluster and answer:

  1. Do we run the retired Kubernetes Ingress-NGINX controller?
  2. Which internet-facing services depend on it?
  3. Which annotations or custom configuration define behaviour that the basic Ingress resource does not show?
  4. Who owns the migration and what is the target date?
  5. How will we prove that the replacement behaves correctly before traffic moves?

If the answers are incomplete, record Ingress-NGINX as an unsupported platform dependency and give the migration an owner. A working controller is not the same as a supported controller.

Know, use or master?

Know: Developers should understand that the Ingress API, Ingress-NGINX and Gateway API are different things. Application teams need to know which routing behaviours their services rely on.

Use: Platform and DevOps engineers should inventory annotations, evaluate implementations, translate routes and test behaviour in parallel environments.

Master: Platform architects responsible for shared clusters should design GatewayClass, Gateway, route ownership, policy attachment, conformance validation and controller lifecycle governance.

Ingress-NGINX retirement is not a reason for a rushed controller swap. It is a reason to stop treating the ingress layer as invisible plumbing. Understand its behaviour, choose a maintained destination and migrate traffic with evidence.

References and further reading

Report a correction

Corrections go to the editor and are never published automatically. No account needed.