Kubernetes 1.36: Ingress-NGINX Is Dead, Migrate to Gateway API
~6 min readDevOpsIngress-NGINX powered roughly half of all Kubernetes clusters. On 24 March 2026 it went read-only. No more bug fixes, no security patches.
What Happened
The retirement was not sudden. In November 2025, Kubernetes SIG Network and the Security Response Committee announced that the ingress-nginx controller would enter best-effort maintenance until March 2026, after which all development would cease. The announcement cited an unsustainable maintainership gap: despite millions of deployments, the project had been kept alive by one or two maintainers working in their spare time. Repeated calls for contributors went unanswered.
On 29 January 2026, the Steering Committee and Security Response Committee issued a joint statement warning that roughly 50 percent of cloud-native environments depended on the controller. The statement was blunt: "We cannot overstate the severity of this situation or the importance of beginning migration to alternatives like Gateway API." On 2 February, four high-severity CVEs were disclosed against ingress-nginx, underscoring the risk of running unmaintained software in the L7 data path.
On 24 March 2026, the kubernetes/ingress-nginx repository was archived and moved to the kubernetes-retired organisation. Existing deployments continue to function, and Helm charts and container images remain available, but there will be no further releases of any kind.
An important clarification: the Kubernetes Ingress API itself is not removed. It remains GA and feature-frozen. What retired is the community ingress-nginx controller. The F5/NGINX Inc. commercial controller is a separate project and is unaffected.
Why Gateway API
The Ingress API was introduced in Kubernetes 1.19 and served the ecosystem well, but its design accumulated limitations that became impossible to fix without breaking backward compatibility. Gateway API replaces those limitations with a deliberately extensible architecture.
Typed CRDs replace annotation sprawl. Ingress-nginx relied on dozens of annotations to configure behaviour that the base API could not express: CORS policies, backend TLS, regex path matching, rate limiting, canary deployments. Each annotation was controller-specific, making configurations non-portable and difficult to validate. Gateway API encodes these behaviours as first-class fields in strongly-typed resources.
The three-layer role separation is the central architectural improvement. GatewayClass is the infrastructure-level resource, analogous to a StorageClass. Platform teams define it once to specify which controller implementation to use. Gateway binds listeners to addresses. Cluster operators create Gateway resources to provision load balancers and configure TLS termination. HTTPRoute, TLSRoute, GRPCRoute, and other route types define application-level routing. Application developers own these resources and can attach them to Gateways without touching infrastructure configuration. This separation maps cleanly to real organisational boundaries and enables native RBAC enforcement.