- Authors

- Name
- Phillip Pham
- @ddppham
Kubernetes Gateway API: Der Ingress-Nachfolger fuer Enterprise Traffic Management
TL;DR
- Die Kubernetes Gateway API ersetzt das Ingress-Objekt durch ein rollenbasiertes Modell mit GatewayClass, Gateway und Route-Ressourcen.
- HTTPRoute, GRPCRoute und TLSRoute bieten protokollspezifisches Routing ohne Annotations-Hacks.
- Traffic Splitting, Header-basiertes Routing und Cross-Namespace-Referenzen sind nativ unterstuetzt.
- Cilium, Envoy Gateway, NGINX Gateway Fabric und Istio implementieren den Standard produktionsreif.
- Die Migration von Ingress ist schrittweise moeglich -- beide APIs laufen parallel.
Warum die Ingress API an ihre Grenzen stoesst
Das Ingress-Objekt existiert seit Kubernetes 1.1. Nach Jahren in der Praxis zeigen sich klare Schwaechen:
Annotations-Wildwuchs: Jeder Ingress Controller hat eigene Annotations. Was bei NGINX funktioniert, existiert bei Traefik nicht. Typische Ingress-Probleme beschreibt Kubernetes Ingress 502/503/504 Troubleshooting.
Keine Rollentrennung: Ingress mischt Infrastruktur-Konfiguration (TLS, Listener-Ports) mit Anwendungslogik (Routing-Regeln).
Eingeschraenkte Protokolle: Ingress unterstuetzt nur HTTP und HTTPS. TCP, UDP, gRPC erfordern Workarounds.
Das rollenbasierte Ressourcenmodell
Die Gateway API trennt Verantwortlichkeiten auf drei Ebenen:
| Ressource | Verantwortlich | Funktion |
|---|---|---|
| GatewayClass | Infrastruktur-Admin | Definiert den Controller-Typ |
| Gateway | Cluster-Admin / Platform Team | Konfiguriert Listener, Ports, TLS |
| HTTPRoute / GRPCRoute / TLSRoute | Entwickler | Definiert Routing-Regeln |
GatewayClass: Die Infrastruktur-Ebene
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: envoy-gateway
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
Die GatewayClass wird einmalig vom Infrastruktur-Admin erstellt. Entwickler referenzieren sie indirekt ueber das Gateway.
Gateway: Listener und TLS
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: production-gateway
namespace: gateway-system
spec:
gatewayClassName: envoy-gateway
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: wildcard-tls-cert
namespace: cert-manager
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
gateway-access: "true"
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
gateway-access: "true"
Das Feld allowedRoutes kontrolliert, welche Namespaces Routes binden duerfen. Fuer Cross-Namespace-Zugriff auf TLS-Secrets braucht ihr einen ReferenceGrant:
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-gateway-cert-access
namespace: cert-manager
spec:
from:
- group: gateway.networking.k8s.io
kind: Gateway
namespace: gateway-system
to:
- group: ""
kind: Secret
HTTPRoute: Routing fuer Entwickler
Einfaches Routing
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: webapp-route
namespace: webapp
spec:
parentRefs:
- name: production-gateway
namespace: gateway-system
hostnames:
- "app.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: webapp-service
port: 8080
Header-basiertes Routing
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-versioned-route
namespace: api
spec:
parentRefs:
- name: production-gateway
namespace: gateway-system
hostnames:
- "api.example.com"
rules:
- matches:
- headers:
- name: X-API-Version
value: "v2"
backendRefs:
- name: api-v2-service
port: 8080
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api-v1-service
port: 8080
Traffic Splitting fuer Canary Deployments
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: canary-route
namespace: webapp
spec:
parentRefs:
- name: production-gateway
namespace: gateway-system
hostnames:
- "app.example.com"
rules:
- backendRefs:
- name: webapp-stable
port: 8080
weight: 90
- name: webapp-canary
port: 8080
weight: 10
10% des Traffics gehen an die Canary-Version. Ueber weight laesst sich der Split stufenweise anpassen.
GRPCRoute: Natives gRPC-Routing
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
name: grpc-route
namespace: grpc-services
spec:
parentRefs:
- name: production-gateway
namespace: gateway-system
hostnames:
- "grpc.example.com"
rules:
- matches:
- method:
service: myapp.UserService
method: GetUser
backendRefs:
- name: user-service
port: 50051
- matches:
- method:
service: myapp.OrderService
backendRefs:
- name: order-service
port: 50051
TLSRoute: TLS-Passthrough
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TLSRoute
metadata:
name: tls-passthrough-route
namespace: secure-apps
spec:
parentRefs:
- name: production-gateway
namespace: gateway-system
sectionName: tls-passthrough
hostnames:
- "secure.example.com"
rules:
- backendRefs:
- name: secure-backend
port: 8443
Gateway API vs. Ingress: Vergleich
| Feature | Ingress | Gateway API |
|---|---|---|
| Rollentrennung | Keine | Drei Ebenen |
| Protokolle | HTTP/HTTPS | HTTP, HTTPS, gRPC, TLS, TCP, UDP |
| Traffic Splitting | Annotations (controller-spezifisch) | Nativ via weight |
| Header-Routing | Annotations (controller-spezifisch) | Nativ via matches |
| Cross-Namespace | Nicht moeglich | Nativ mit ReferenceGrant |
| Portabilitaet | Gering (Annotations-Lock-in) | Hoch (standardisierte API) |
Unterstuetzte Implementierungen
Envoy Gateway (Referenzimplementierung)
helm install envoy-gateway \
oci://docker.io/envoyproxy/gateway-helm \
--version v1.2.0 \
-n envoy-gateway-system --create-namespace
Cilium Gateway API
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--set gatewayAPI.enabled=true \
--set kubeProxyReplacement=true
Cilium kombiniert CNI und Gateway API in einem Stack. Mehr zu Netzwerk-Policies: Kubernetes Network Policies.
NGINX Gateway Fabric
helm install ngf oci://ghcr.io/nginx/charts/nginx-gateway-fabric \
--version 1.5.0 --create-namespace -n nginx-gateway
Istio
istioctl install --set profile=minimal \
--set values.pilot.env.PILOT_ENABLE_GATEWAY_API=true
Fuer einen Service-Mesh-Vergleich: Istio vs. Linkerd.
Migration von Ingress zur Gateway API
Schritt 1: CRDs installieren
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
kubectl get crds | grep gateway.networking.k8s.io
Schritt 2: Gateway erstellen
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: production
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: main-gateway
namespace: gateway-system
spec:
gatewayClassName: production
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: wildcard-cert
allowedRoutes:
namespaces:
from: All
EOF
Schritt 3: Ingress-Objekte schrittweise durch HTTPRoutes ersetzen
Beide APIs laufen parallel. Ersetzt ein Ingress nach dem anderen und validiert per Monitoring, dass der Traffic korrekt fliesst. Monitoring-Strategien beschreibt Kubernetes Monitoring und Observability.
Schritt 4: DNS umschalten und altes Ingress loeschen
# Gateway-IP ermitteln
kubectl get gateway main-gateway -n gateway-system \
-o jsonpath='{.status.addresses[0].value}'
# DNS-Eintrag auf neue IP umschalten, dann:
kubectl delete ingress webapp -n webapp
Troubleshooting
# Route-Status pruefen
kubectl get httproute webapp -n webapp -o jsonpath='{.status.parents[0].conditions}' | jq .
# Namespace-Label fehlt?
kubectl label namespace webapp gateway-access=true
# Gateway-Status
kubectl describe gateway main-gateway -n gateway-system
# Controller-Logs
kubectl logs -n envoy-gateway-system -l app.kubernetes.io/name=envoy-gateway
Fazit
Die Kubernetes Gateway API ist GA und loest reale Probleme, die mit Ingress nur ueber Workarounds loesbar waren. Jedes neue Projekt sollte direkt auf die Gateway API setzen. Fuer Helm-basierte Deployments laesst sich die Gateway API nahtlos integrieren: Helm Charts Einfuehrung.
Verwandte Artikel
- Kubernetes Ingress 502/503/504 Troubleshooting
- Istio vs. Linkerd Vergleich
- Kubernetes Network Policies Advanced
- Kubernetes Monitoring und Observability
- Helm Charts fuer Kubernetes
Braucht ihr Unterstuetzung bei der Migration auf die Gateway API oder beim Aufbau einer Traffic-Management-Strategie? Kontaktiert uns fuer eine individuelle Beratung.
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Gateway API: Der neue Kubernetes Ingress Standard
Kubernetes Gateway API als moderner Ingress-Ersatz. GatewayClass, Gateway und HTTPRoute konfigurieren, Traffic Splitting und Header-basiertes Routing einrichten.
API Gateway für Kubernetes: Nginx, Kong, Traefik
Kubernetes API Gateways im Vergleich: Nginx Ingress, Kong und Traefik mit Feature-Matrix, Installations-Aufwand und Gateway API HTTPRoute-Beispielen.
Kubernetes Ingress keine Adresse zugewiesen: Lösung
Kubernetes Ingress zeigt keine Address? Ursachen und Lösungen für fehlende IngressClass, nicht installierte Controller und Pending LoadBalancer.
Kubernetes Ingress 502, 503, 504 Fehler beheben
Ingress-Fehler systematisch lösen: 502 Bad Gateway, 503 Service Unavailable und 504 Timeout mit Ursachen, Debugging-Schritten und Fixes.
CNI-Vergleich: Calico vs Cilium für Kubernetes
Calico und Cilium im direkten Vergleich: Architektur, Performance, Network Policies und Observability. Welches CNI-Plugin passt zu deinem Cluster?