Understanding Kubernetes Ingress and the Gateway API: Concepts, Comparison, and Best Practices
This article explains how Kubernetes manages inbound traffic using Ingress and the newer Gateway API, compares their features and limitations, provides YAML examples for Ingress, GatewayClass, Gateway, and Route resources, and discusses the future direction of traffic management in cloud‑native environments.
As Kubernetes becomes ubiquitous in cloud‑native environments, traffic management is essential; the platform offers Ingress and the emerging Gateway API to control external traffic entering a cluster.
Ingress provides a simple way to configure HTTP/HTTPS routing via a reverse proxy, allowing hosts to be mapped to services. Example manifest:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80Despite its convenience, Ingress has critical drawbacks: limited to L7 HTTP(S) protocols, vendor‑specific controller implementations that cause lock‑in, and scalability issues for large clusters.
The Gateway API was introduced to address these limitations, offering a standardized, extensible traffic routing layer that supports multiple protocols (L4‑L7), reduces vendor dependence, and separates responsibilities through distinct resources.
GatewayClass describes the underlying gateway implementation (e.g., Nginx, Istio). Example:
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 1.4.0
name: nginx
spec:
controllerName: gateway.nginx.org/nginx-gateway-controllerGateway represents a concrete traffic entry point, referencing a GatewayClass and defining listeners (ports and protocols). Example:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: prod-web
spec:
gatewayClassName: nginx
listeners:
- protocol: HTTP
port: 80
name: prod-web-gwRoute resources (e.g., HTTPRoute, TCPRoute) define routing rules for different protocols. An HTTPRoute example that routes based on request headers:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: foo-route
labels:
gateway: prod-web-gw
spec:
hostnames:
- foo.example.com
rules:
- backendRefs:
- name: foo-v1
port: 8080
- matches:
- headers:
- name: traffic
value: test
backendRefs:
- name: foo-v2
port: 8080The Gateway API also includes the GAMMA initiative (Gateway API for Mesh Management and Administration) to extend traffic management to east‑west (service‑to‑service) flows, aiming for a unified approach to both north‑south and east‑west traffic.
In summary, Ingress remains supported and is suitable for simple, small‑scale scenarios, while the Gateway API offers a more powerful, multi‑protocol, vendor‑agnostic solution for complex, large‑scale cloud‑native deployments.
System Architect Go
Programming, architecture, application development, message queues, middleware, databases, containerization, big data, image processing, machine learning, AI, personal growth.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.