Zurück zum Blog
Cloud
Experten-LevelFürPlatform EngineersDevOps EngineersBackend Engineers
6 min

GKE Gateway API vs Ingress 2026: Wann nginx Geschichte ist

GKE Gateway API vs Ingress 2026: das rollenorientierte Modell, die vier GatewayClasses, das Proxy-only-Subnetz für regionale Cluster und wann man nginx ablöst.

gke-gateway-apikubernetes-ingressgkegatewayclasskubernetesgoogle-cloudload-balancing
Titelbild: GKE Gateway API vs Ingress 2026: Wann nginx Geschichte ist
Inhalt

Jahrelang bedeutete das Exponieren einer Anwendung auf Kubernetes eines von zwei Dingen: ein Cloud-Ingress-Objekt vollgestopft mit Annotationen, oder ein selbst gehosteter nginx-Ingress-Controller, der als Pods im Cluster läuft. Beides funktioniert. Beides ist jetzt der alte Weg.

2026 lautet die Antwort der Kubernetes-Community Gateway API, und auf GKE ist es allgemein verfügbar, rollenorientiert und direkt von Googles Cloud Load Balancing getragen. Das hier ist ein praktischer Leitfaden dazu, was es ist, welche vier GatewayClasses du wirklich bekommst, was regionale Cluster zwingend konfigurieren müssen und wann sich das Abschalten von nginx lohnt.

Warum Ingress am Ende war

Ingress wurde als eine Ressource entworfen, die alles macht: sie definiert das Frontend (Ports, TLS), die Routing-Regeln (Host und Pfad zum Service) und — weil die Basisspezifikation dünn ist — einen Haufen controller-spezifischer Annotationen für alles Fortgeschrittene. Rewrites, Redirects, Timeouts, CORS, Body-Size: alles Annotationen.

Das erzeugt zwei Probleme. Erstens vermischt ein Objekt in der Hand eines Teams Plattform-Belange (TLS, IP-Adressen) mit Applikations-Belangen (Routen). Zweitens ist jede Annotation anbieterspezifisch, also ist deine Konfiguration weder portabel noch auf standardisierte Weise ausdrucksstark.

Ingress packt Frontend, Routing, TLS und Anbieter-Annotationen in ein Objekt; Gateway API teilt dieselbe Aufgabe in GatewayClass, Gateway und HTTPRoute, jede in der Hand einer anderen Rolle.

Das Gateway-API-Modell: drei Rollen statt einem Objekt

Gateway API ist eine Weiterentwicklung von Ingress, die das eine Objekt in drei Ressourcen aufbricht, ausgerichtet daran, wer welchen Belang wirklich besitzt:

  • GatewayClass — eine cluster-weite Vorlage für einen Load Balancer. Auf GKE stellt Google sie bereit; du schreibst sie nicht. Jede GatewayClass entspricht einem bestimmten Cloud-Load-Balancer-Typ.
  • Gateway — erstellt vom Plattform- / Cluster-Operator. Es deklariert, wo und wie gelauscht wird: Ports, Protokolle, TLS und IP-Adressen. Es wählt eine GatewayClass.
  • HTTPRoute — erstellt von App-Teams. Sie deklariert das Routing: welche Hostnamen und Pfade auf welche Services zeigen, plus Header-Matching, Traffic-Splitting, Redirects und Rewrites — alles native Felder, keine Annotationen.

Gateway und Route binden bidirektional: ein Gateway deklariert, welche Namespaces sich anhängen dürfen, und eine Route deklariert, an welches Gateway sie sich anhängt. Genau das macht einen einzelnen Load Balancer sicher teilbar über Teams und Namespaces hinweg — die Mehrmandantenfähigkeit, die Ingress nie hatte.

Der GKE-Gateway-Controller selbst ist Google-gehostet und läuft out of band: er beobachtet die Kubernetes-API und gleicht Cloud-Load-Balancing-Ressourcen ab. Er ist keine Datenebene, sitzt nicht im Anfragepfad und läuft weder auf deiner Control Plane noch in deinem Projekt. Das ist ein spürbarer Robustheits- und Skalierungsunterschied gegenüber einem In-Cluster-nginx-Controller.

Die vier GatewayClasses, die du standardmäßig bekommst

Aktiviere Gateway API und GKE installiert die Single-Cluster-GatewayClasses automatisch. Vier zählen für die tägliche Arbeit:

Die vier Single-Cluster-GatewayClasses: global-external-managed (empfohlen), regional-external-managed und rilb (beide brauchen ein Proxy-only-Subnetz) und das veraltete gxlb zum Meiden.

Die vier GatewayClasses, die du standardmäßig bekommst
GatewayClass Load Balancer Wofür
gke-l7-global-external-managed Global external Application LB Empfohlener Standard für Internet-Apps; Anycast-IP, Premium Tier, geringste globale Latenz
gke-l7-regional-external-managed Regional external Application LB Externer Verkehr, an eine Region gebunden
gke-l7-rilb Internal Application LB Privater, VPC-interner Verkehr
gke-l7-gxlb Classic Application LB Veraltet — meiden; keine HTTP-zu-HTTPS-Weiterleitung, keine Custom Headers

Google empfiehlt ausdrücklich gke-l7-global-external-managed gegenüber dem klassischen gke-l7-gxlb, um die fortgeschrittenen Sicherheits- und Traffic-Management-Funktionen zu erhalten. Es gibt auch Multi-Cluster-Varianten (-mc) für Fleets und eine Service-Mesh-Klasse (gke-td), aber die obigen vier decken die große Mehrheit der Single-Cluster-Deployments ab.

Regionale Cluster: Das Proxy-only-Subnetz ist Pflicht

Das ist der Schritt, über den Leute stolpern, also bekommt er einen eigenen Abschnitt.

Beide regionalen GatewayClasses — gke-l7-regional-external-managed und gke-l7-rilb — benötigen ein Proxy-only-Subnetz in jeder Region, in der du sie einsetzt. Die globale externe Klasse nicht. Das Proxy-only-Subnetz ist der Ort, an dem Cloud Load Balancing seine verwalteten Envoy-Proxys platziert; ohne es scheitert der Gateway-Controller mit einem Fehler, dass ein reserviertes Managed-Proxy-Subnetz mit Purpose REGIONAL_MANAGED_PROXY erforderlich ist.

Erstelle es einmal pro Region, vor dem Gateway:

Terminal window
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=europe-west3 \
--network=my-vpc \
--range=10.129.0.0/23

Ein /23 ist der empfohlene Bereich, damit genug IPs für die Skalierung der Proxys da sind; /26 (64 Adressen) ist das harte Minimum. Ein ACTIVE-Proxy-only-Subnetz bedient alle regionalen Gateways in dieser Region und VPC — du erstellst nicht eines pro Gateway.

Existiert in der Region bereits ein Proxy-only-Subnetz mit dem älteren Purpose INTERNAL_HTTPS_LOAD_BALANCER, migriere es zu REGIONAL_MANAGED_PROXY; GKE Gateway akzeptiert nur Letzteres.

Ein minimales Gateway + HTTPRoute

Das Plattform-Team deployt das Gateway einmal:

kind: Gateway
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: external-http
spec:
gatewayClassName: gke-l7-global-external-managed
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- name: store-example-com

Ein App-Team hängt dann eigenständig Routen an, im eigenen Namespace:

kind: HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: store
spec:
parentRefs:
- kind: Gateway
name: external-http
hostnames:
- "store.example.com"
rules:
- matches:
- path:
value: /de
backendRefs:
- name: store-german
port: 8080
- backendRefs:
- name: store-v1
port: 8080

Header-Matching, gewichtetes Traffic-Splitting, Pfad-Redirects und URL-Rewrites sind erstklassige Felder auf der HTTPRoute — was früher nginx-Annotationen waren, ist jetzt portable Spezifikation. Für alles Load-Balancer-Spezifische (Health Checks, Backend-Policies) hängst du eine Policy-Ressource an (HealthCheckPolicy, GCPBackendPolicy) statt eines BackendConfig.

Wann man nginx ablöst

Hier die ehrliche Version.

Ein selbst gehosteter nginx-Ingress-Controller läuft als Deployment-Pods in deinem Cluster. Du besitzt ihr Autoscaling, ihren Ressourcen-Fußabdruck, ihre Upgrades und jede nginx- und Ingress-Controller-CVE, die auftaucht. Dafür bekommst du einen sehr fähigen In-Cluster-L7-Proxy.

Entscheidungsfluss: interner Verkehr geht zu gke-l7-rilb; externer Single-Region zu regional-external-managed; externer global zu global-external-managed. In jedem Zweig ist die Datenebene Google-verwaltet, ohne nginx-Pods.

GKE Gateway entfernt diese Betriebsfläche vollständig. Die Datenebene ist Google-verwaltetes Cloud Load Balancing. Es gibt keine Ingress-Pods zu betreiben, skalieren oder patchen; der Controller läuft out of band; und der Load Balancer ist Googles globale Infrastruktur, nicht drei Repliken, die du per Schätzung dimensioniert hast.

Migriere zu Gateway, wenn:

  • Du willst, dass die L7-Datenebene jemand anderes Betriebsproblem ist — der Normalfall.
  • Du globales Load Balancing, Anycast-IPs oder Cloud-Armor-/Cloud-CDN-Integration brauchst, die direkt in Cloud Load Balancing einklinkt.
  • Du Rollentrennung willst: Plattform besitzt Gateways, App-Teams besitzen Routen, über Namespaces hinweg.
  • Du bei null anfängst — jedes bestehende Ingress bildet sich sauber auf ein Gateway plus eine HTTPRoute ab.

Behalte nginx nur, wenn:

  • Du von In-Cluster-L7-Funktionen abhängst, die Cloud Load Balancing nicht bietet (exotische Lua-/Rewrite-Logik, spezielle Auth-Module, Protokolle jenseits HTTP/S).
  • Du TCP/UDP- oder TLS-Passthrough-Routing brauchst — GKE Gateway unterstützt derzeit nur HTTPRoute; TCPRoute, UDPRoute und TLSRoute nicht.
  • Du eine selbst verwaltete L7-Datenebene willst, die du über Clouds hinweg vollständig kontrollierst und nicht an den Managed-Load-Balancer des jeweiligen Anbieters gebunden ist. Ehrlicher Vorbehalt: Gateway API ist selbst ein portabler Standard, also passt eine portable Gateway-Implementierung (Envoy Gateway, NGINX Gateway Fabric) hier meist besser als klassisches nginx-Ingress.

Die Feldregel

Gateway API ist die Richtung, in die Kubernetes-Ingress geht, und auf GKE ist es GA, kostenlos mit der Plattform und von Googles Cloud Load Balancing getragen. Teile das alte Ingress in GatewayClass + Gateway + HTTPRoute, nimm standardmäßig gke-l7-global-external-managed für Internet-Apps, wechsle zu gke-l7-rilb für privaten Verkehr, und merke dir die eine harte Voraussetzung: regionale Klassen brauchen ein Proxy-only-Subnetz pro Region. Für die meisten Teams ist genau diese Kombination der Moment, in dem selbst gehostetes nginx sich nicht mehr lohnt.

Zum Cluster-Modus, auf dem das alles läuft, siehe GKE Autopilot vs Standard 2026. Um einzugrenzen, was diese Workloads erreichen dürfen, sobald Verkehr drin ist, siehe Service-Account-Schlüssel abschaffen: Workload Identity Federation auf GKE.

Häufig gestellte Fragen

Was ist der Unterschied zwischen GKE Ingress und Gateway API?

Ingress packt Frontend-Konfiguration, Routing, TLS und anbieterspezifisches Verhalten in ein einziges Objekt, oft über Annotationen gesteuert. Gateway API teilt das in rollenorientierte Ressourcen: eine GatewayClass (eine von Google bereitgestellte Load-Balancer-Vorlage), ein Gateway (dem Plattform-Team gehörend, definiert Ports, Adressen und TLS) und eine HTTPRoute (den App-Teams gehörend, definiert Host- und Pfad-Routing). Gateway ist portabel über Implementierungen hinweg, drückt Header-Matching und Traffic-Weighting nativ aus und ist die von Google empfohlene Richtung für neue Workloads.

Sollte ich nginx-Ingress auf GKE ablösen?

Für die meisten GKE-Workloads ja. Selbst gehostetes nginx-Ingress bedeutet, dass du die Ingress-Controller-Pods selbst betreibst, skalierst, überwachst und patchst — und die CVE-Last trägst. GKE Gateway lagert die L7-Datenebene an Google-verwaltetes Cloud Load Balancing aus — der Gateway-Controller läuft out of band und provisioniert Cloud Load Balancing für dich, ohne Datenebenen-Pods im Cluster. nginx behältst du nur dort, wo du wirklich In-Cluster-L7-Funktionen brauchst, die Cloud Load Balancing nicht bietet.

Welche GatewayClass sollte ich auf GKE nutzen?

Für Internet-Apps mit globalem Publikum nimm gke-l7-global-external-managed — es provisioniert einen globalen externen Application Load Balancer mit Anycast-IP und ist Googles empfohlener Standard. Für externen Verkehr in einer Region nimm gke-l7-regional-external-managed. Für privaten, VPC-internen Verkehr nimm gke-l7-rilb. Meide das veraltete gke-l7-gxlb (Classic ALB), dem Funktionen wie HTTP-zu-HTTPS-Weiterleitungen und Custom Headers fehlen.

Brauche ich ein Proxy-only-Subnetz für GKE Gateway?

Nur für die regionalen GatewayClasses. Sowohl gke-l7-regional-external-managed als auch gke-l7-rilb benötigen ein Proxy-only-Subnetz mit Purpose REGIONAL_MANAGED_PROXY in jeder Region, in der du sie einsetzt — ein /23-Bereich wird empfohlen, /26 ist das Minimum. Die globale externe Klasse braucht keins. Erstelle das Subnetz vor dem Gateway, sonst gibt der Controller einen Fehler zurück, dass ein reserviertes Managed-Proxy-Subnetz erforderlich ist.

Ist GKE Gateway API allgemein verfügbar und kostet es extra?

Ja. Der Single-Cluster-GKE-Gateway-Controller ist allgemein verfügbar (GA) und ohne Aufpreis Teil der GKE-Standard- und Autopilot-Preise. Du zahlst nur für die zugrunde liegenden Cloud-Load-Balancing-Ressourcen, die er provisioniert. Gateway API ist auf Autopilot-Clustern standardmäßig aktiv und lässt sich auf Standard mit einem gcloud-Flag aktivieren. Nur HTTPRoute wird unterstützt; TCPRoute, UDPRoute und TLSRoute nicht.

Aus der Community

Diskussion im Fediverse

Antworten von Mastodon und Bluesky — direkt aus dem offenen Netz, ohne Tracking.

Antworten werden geladen …

ENDE