Ingress vervangen door Gateway API (Kubernetes)
Praktische migratie van Ingress naar Gateway API: CRDs, GatewayClass, Gateway, HTTPRoute en een checklist.
De Kubernetes Gateway API vervangt het klassieke Ingress model met een explicietere, role-oriented API. In de praktijk wordt routing beter uit te drukken, ownership duidelijker, en cross-namespace relaties zijn gecontroleerd mogelijk.
Deze gids houdt de migratie bewust incrementeel: eerst parallel aan je bestaande Ingress, daarna per host/path omzetten.
Gateway API CRD relaties
Kort:
GatewayClassbeschrijft welke controller de Gateways implementeert.Gatewayis je entrypoint: listeners, (TLS) termination en policy.HTTPRoutevervangt host/path regels van Ingress en koppelt aan eenGatewayviaparentRefs.ReferenceGrantis nodig als je routes/services cross-namespace wilt refereren.
1) Installeer Gateway API CRDs
Dit is non-destructief: bestaande Ingress traffic blijft gewoon werken.
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
kubectl get crd | grep gateway.networking.k8s.io
Verwachte CRDs:
gatewayclasses.gateway.networking.k8s.io
gateways.gateway.networking.k8s.io
httproutes.gateway.networking.k8s.io
referencegrants.gateway.networking.k8s.io
2) Definieer een GatewayClass
GatewayClass is conceptueel de opvolger van IngressClass. Koppel deze expliciet aan je controller.
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: nginx-gateway
spec:
controllerName: k8s.nginx.org/nginx-gateway-controller
Gebruik je een andere controller (bijv. Envoy, HAProxy, cloud-LB controller), dan verandert alleen controllerName.
3) Maak een Gateway (listeners, later TLS)
Begin met HTTP. Voeg TLS pas toe als je routes attached en working zijn.
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: edge-gateway
namespace: edge
spec:
gatewayClassName: nginx-gateway
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: All
4) Converteer Ingress naar HTTPRoute
Host/path regels blijven herkenbaar, maar de koppeling naar de Gateway gebeurt via parentRefs.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: app-route
namespace: app
spec:
parentRefs:
- name: edge-gateway
namespace: edge
hostnames:
- app.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: app-service
port: 80
5) Valideer status en verkeer
Check of de Gateway ready is en de route attached is. Pas daarna DNS of je edge/LB config aan.
kubectl get gateway -n edge
kubectl get httproute -n app
Voorbeeld output:
NAME CLASS ADDRESS PROGRAMMED AGE
edge-gateway nginx-gateway 203.0.113.10 True 2m
NAME HOSTNAMES AGE
app-route app.example.com 2m
Migratie checklist
- Installeer Gateway API CRDs en je controller parallel aan Ingress.
- Maak
GatewayClassen per omgeving eenGateway. - Converteer Ingress regels naar
HTTPRoutein kleine batches (per host/path). - Verplaats DNS/traffic incrementeel (canary indien mogelijk).
- Verwijder legacy Ingress pas als traffic stabiel is en observability groen blijft.