Kubernetes Ingress has served the ecosystem well, but it is now frozen — no new features will be added, and its annotation-heavy interface makes consistent, multi-team workflows difficult. The Kubernetes community is converging on Gateway API, its successor: a role-oriented, vendor-neutral standard with native L4/L7 routing, TLS termination, and TCP/UDP support built in.
With Gardener v1.150, GEP-68 ships as a new extension: gardener-extension-envoy-gateway. It brings Envoy Gateway — an official Envoy Proxy-based Gateway API implementation — directly into shoot clusters as a first-class, operator-managed component.
What Gets Installed ​
When you enable the extension on a shoot, Gardener reconciles the following into the cluster:
- Standard-channel Gateway API CRDs (
GatewayClass,Gateway,HTTPRoute,GRPCRoute,ReferenceGrant,BackendTLSPolicy) — optionally the experimental-channel CRDs (TCPRoute,TLSRoute,UDPRoute) withchannel: experimental - Envoy Gateway control plane in
kube-system(Deployment, RBAC,Service) - Envoy-specific CRDs (
EnvoyProxy,BackendTrafficPolicy, and others) - A single
GatewayClassnamedgardener-envoy-gateway, pre-bound togateway.envoyproxy.io/gatewayclass-controller
All resources are delivered via a ManagedResource, so updates and deletions are idempotent and reconciled by Gardener's resource manager.
Enabling the Extension ​
Add the extension to the spec.extensions field of your Shoot:
spec:
purpose: evaluation # required during the GEP-68 incubation phase
extensions:
- type: envoy-gateway
providerConfig:
apiVersion: envoy-gateway.extensions.gardener.cloud/v1alpha1
kind: EnvoyGatewayConfig
controlPlane:
logLevel: info # debug|info|warn|error
channel: standard # standard|experimentalAfter the Shoot is reconciled, verify the GatewayClass is accepted:
kubectl get gatewayclass gardener-envoy-gateway
# NAME CONTROLLER ACCEPTED
# gardener-envoy-gateway gateway.envoyproxy.io/gatewayclass-controller TrueCreating Your First HTTPRoute ​
With the GatewayClass in place, create a Gateway and an HTTPRoute to expose a Service:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-gateway
namespace: demo
spec:
gatewayClassName: gardener-envoy-gateway
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-route
namespace: demo
spec:
parentRefs:
- name: my-gateway
rules:
- backendRefs:
- name: my-service
port: 80Envoy Gateway provisions a Service of type LoadBalancer for the Gateway. Traffic is evenly distributed across matching backend pods, and routing rules — path matching, header-based rules, traffic splitting — are expressed directly on the HTTPRoute.
Coexistence with gardener-extension-shoot-traefik ​
The extension is the sibling of gardener-extension-shoot-traefik (GEP-57). Both extensions are intentionally disjoint and can run side by side in the same shoot — though running both simultaneously in production is generally not recommended. Teams already on Traefik can evaluate Envoy Gateway without interference.
Current Status ​
The extension ships Envoy Gateway v1.8.3 with Gateway API CRDs v1.5.1, supporting Kubernetes v1.32–v1.35. During the GEP-68 incubation phase, an admission webhook restricts usage to shoots with spec.purpose: evaluation. Operator-controlled version pinning is planned via the upcoming extension profile feature.
Operators register the extension on a landscape by applying an Extension resource to the virtual garden cluster — see the deployment guide for the full procedure.