Kubernetes networking is entering a new era — and one of its oldest, most widely used components is stepping aside.
For years, the open-source NGINX Ingress Controller powered traffic for countless Kubernetes clusters.
It became the default choice for developers, DevOps teams, and platform engineers.
If you ran Kubernetes, chances are… you deployed NGINX Ingress too.
But the ecosystem has evolved — fast.
And now, the message from the community is unmistakable:
The NGINX Ingress Controller (open-source) is deprecated.
The future belongs to Gateway API.
This shift marks one of the biggest changes in Kubernetes networking since Ingress was introduced.
So let’s break down exactly why this is happening — and how you should prepare.
🛑 Why NGINX Ingress Controller Is Being Deprecated
While NGINX Ingress served the community well, it began falling behind due to:
- Declining community contributions
- Limited advancement in modern traffic patterns
- Protocol restrictions (primarily HTTP/HTTPS)
- Heavy reliance on annotations
- No clean separation between platform and app owners
- Lack of native features for advanced policies
- Fragmentation across vendors
Meanwhile, Kubernetes workloads grew massively more complex:
- Microservices
- Multi-protocol traffic
- Service meshes
- Multi-team environments
- Zero trust networking
Ingress wasn’t designed for this scale.
✨ Enter Gateway API: The Future of Kubernetes Traffic Management
Created collaboratively by:
- Kubernetes SIG Network
- Vendors
- Cloud providers
- Gateway/LoadBalancer projects
Gateway API solves the inherent limitations of Ingress with an architecture built for the next decade.
Why Gateway API > Ingress?
✔ Multi-protocol support
HTTP, HTTPS, gRPC, TCP, UDP, TLS — all first-class citizens.
Ingress was limited to HTTP/HTTPS.
✔ Separation of concerns: Platform vs Application teams
- Platform engineers manage Gateways
- Application teams manage HTTPRoutes/GRPCRoutes/TLSRoutes
✔ No more annotation chaos
Everything is standardized and portable.
✔ Advanced traffic policies built-in
- Canary
- Blue/Green
- Traffic splitting
- Header-based routing
- mTLS
- Timeouts, retries, rate limits
✔ Vendor-aligned + community-driven
Everyone supports the same model.
🔥 Who Is Already Using Gateway API?
Full production support from:
- NGINX
- Kong
- Traefik
- Istio
- Contour (Envoy)
- HAProxy
- AWS Load Balancer Controller
- Google Cloud Load Balancer
- Azure Application Gateway
This wide adoption is exactly why Gateway API is becoming the standard.
🧭 The Message Is Clear
✨ Ingress was good… Gateway API is GREAT.
Kubernetes is finally getting a clean, powerful, standardized networking model that works across every cloud, every vendor, every environment.
🛠️ Implementation Guide: How to Migrate from NGINX Ingress → Gateway API
Now let’s move into the part everyone wants —
implementation.
Below is the complete step-by-step guide to migrating your platform to Gateway API.
🧩 Step 1: Install a Gateway API–Compatible Controller
Gateway API isn’t a controller itself — it’s a specification.
You must install a controller implementation such as:
- NGINX Gateway Fabric (recommended for NGINX users)
- Kong Gateway
- Traefik
- Istio Gateway
- Contour (Envoy)
Example: Install NGINX Gateway Fabric
kubectl apply -f https://raw.githubusercontent.com/nginxinc/nginx-gateway-fabric/main/deploy/manifests/install.yaml
Check pods:
kubectl get pods -n nginx-gateway
🏗️ Step 2: Create a GatewayClass (Replaces IngressClass)
This defines who manages the Gateways.
apiVersion: gateway.networking.k8s.io/v1kind: GatewayClassmetadata:name: nginxspec:controllerName: nginx.org/gateway-controller
Apply it:
kubectl apply -f gatewayclass.yaml
🌉 Step 3: Create Your Gateway (Replaces LoadBalancer + Ingress Controller Service)
This is the actual entry point to your cluster.
apiVersion: gateway.networking.k8s.io/v1kind: Gatewaymetadata:name: web-gatewaynamespace: defaultspec:gatewayClassName: nginxlisteners:- name: http
port: 80
protocol: HTTP- name: https
port: 443
protocol: HTTPS
tls:
mode: Terminate
certificateRefs:
- name: tls-cert
Apply:
kubectl apply -f gateway.yaml
Check Gateway IP:
kubectl get gateway web-gateway
🔀 Step 4: Convert Ingress → HTTPRoute
Old Ingress Example (Before)
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: demospec:rules:- host: demo.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-svc
port:
number: 80
New HTTPRoute Example (After)
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:name: demo-routenamespace: defaultspec:parentRefs:- name: web-gatewayhostnames:- "demo.example.com"rules:- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: demo-svc
port: 80
Apply:
kubectl apply -f httproute.yaml
Validate:
kubectl get httproute demo-route -o yaml
You should see:
status:parents:- conditions:
- type: Accepted
status: "True"
🧪 Step 5: Test Routing
If Gateway external IP is 34.111.22.15:
curl -H "Host: demo.example.com" http://34.111.22.15/
🔐 Step 6: Add TLS (Optional but Recommended)
Create secret:
kubectl create secret tls tls-cert \
--cert=cert.pem \
--key=key.pem
Gateway automatically handles TLS termination.
No annotation hacks needed.
🚦 Step 7: Advanced Routing (Canary, Header-Based, Version Routing)
Canary Deployment (80/20 Split)
backendRefs:- name: demo-v1port: 80weight: 80- name: demo-v2port: 80weight: 20
Header-Based Routing
matches:- headers:- name: X-User-Tier
value: premium
gRPC Routing Example
kind: GRPCRoute
TCP/UDP Routing Example
kind: TCPRoute
You get multi-protocol support that Ingress never had.
🧹 Step 8: Decommission Old Ingress Safely
Once new Gateway API traffic works:
- Delete old Ingress objects:
kubectl delete ingress --all - Remove old NGINX Ingress controller:
helm uninstall nginx-ingress - Delete
IngressClass - Remove unused annotations
- Update documentation and pipelines
Your cluster is now fully modernized.
🏁 Final Summary
The deprecation of the NGINX Ingress Controller marks the end of an era —
and the beginning of a standardized, scalable, multi-protocol future for Kubernetes networking.
Gateway API is not just an upgrade.
It is the new foundation.
Why it matters:
- Multi-protocol support
- Rich traffic policies
- Vendor ecosystem alignment
- Strong security
- Cleaner architecture
- Separation of duties
What you should do TODAY:
👉 Install a Gateway API controller
👉 Create GatewayClass + Gateway
👉 Migrate Ingress → HTTPRoute
👉 Test + validate
👉 Remove old Ingress components
The earlier you migrate, the smoother your future upgrades become.