Kubernetes Gateway API: The Complete Migration Guide from Ingress

Kubernetes Gateway API reached GA in v1.1. If you're still writing Ingress resources, you're building on a foundation the community has moved past.

Y
Yash Pritwani
4 min read read

One-field diagnostic start

Send one work email. Yash replies with the matching service path, first evidence step, and owner handoff for this issue.

No calendar step. The full contact form stays available if you want to add system context.

One owner, one affected system, and the next buyer or recovery deadline mapped.

# Kubernetes Gateway API: The Complete Migration Guide from Ingress

Kubernetes Gateway API reached GA in v1.1. If you're still writing Ingress resources, you're building on a foundation the community has moved past.

This isn't just a new API — it's a fundamental rethink of how Kubernetes handles networking.

Why Gateway API Replaces Ingress

Ingress was Kubernetes' first attempt at HTTP routing. It worked, but it had problems:

1. Vendor annotations everywherenginx.ingress.kubernetes.io/proxy-body-size is not portable 2. No standard for TCP/UDP — Ingress only handles HTTP(S) 3. Flat permission model — App devs and platform teams edit the same resource 4. No traffic splitting — Canary deployments require controller-specific annotations

Gateway API fixes all of these with a role-oriented design.

Architecture: The Three-Layer Model

Infrastructure Provider → GatewayClass (cluster-scoped)
Platform Team          → Gateway (namespace-scoped)
App Developer          → HTTPRoute / GRPCRoute / TCPRoute

This separation is the killer feature. Platform teams manage Gateways (TLS, listeners, IP allocation). App developers manage Routes (path matching, backends, traffic rules). Neither touches the other's config.

Migration: Ingress to HTTPRoute

Before (Ingress):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080

After (HTTPRoute):

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-app
spec:
  parentRefs:
  - name: main-gateway
  hostnames:
  - "app.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: api-service
      port: 8080

No annotations. No controller-specific syntax. Portable across any Gateway API-compliant implementation.

Traffic Splitting (Built-In)

Canary deployments without annotations or service meshes:

rules:
- backendRefs:
  - name: api-v1
    port: 8080
    weight: 90
  - name: api-v2
    port: 8080
    weight: 10

Supported Implementations

Envoy Gateway — CNCF project, pure Gateway API implementation
Cilium — eBPF-based, high performance
Istio — Service mesh with Gateway API support
Traefik — Full Gateway API support since v3.0
NGINX Gateway Fabric — F5's Gateway API controller
Kong — Gateway API support in Kong Ingress Controller 3.0+

Migration Strategy

1. Install a Gateway API CRD bundle: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml 2. Deploy a GatewayClass and Gateway 3. Create HTTPRoutes alongside existing Ingress resources (both can coexist) 4. Test routing, then remove Ingress resources 5. Update CI/CD templates

TLS Configuration

Gateway API handles TLS at the Gateway level, not the route level. This is a major improvement — platform teams manage certificates centrally:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: main-gateway
spec:
  gatewayClassName: envoy
  listeners:
  - name: https
    protocol: HTTPS
    port: 443
    tls:
      mode: Terminate
      certificateRefs:
      - name: wildcard-cert
        kind: Secret
    allowedRoutes:
      namespaces:
        from: All

App developers never touch TLS config. They reference the Gateway in their HTTPRoute and get HTTPS automatically. No more copying cert-manager annotations across 50 Ingress resources.

GRPCRoute: First-Class gRPC Support

Ingress had no native gRPC support — you needed annotations and workarounds. Gateway API has GRPCRoute as a first-class resource:

apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
  name: grpc-service
spec:
  parentRefs:
  - name: main-gateway
  rules:
  - matches:
    - method:
        service: myapp.UserService
        method: GetUser
    backendRefs:
    - name: user-service
      port: 9090

Method-level routing for gRPC without any controller-specific hacks.

Real-World Migration: Our Experience

We migrated 12 services from NGINX Ingress Controller to Envoy Gateway in a single afternoon. The process:

1. Hour 1: Installed Gateway API CRDs and deployed Envoy Gateway alongside existing NGINX Ingress 2. Hour 2: Created HTTPRoutes for all 12 services, tested with curl against the new Gateway IP 3. Hour 3: Updated DNS to point to the new Gateway, monitored error rates 4. Hour 4: Removed old Ingress resources after confirming zero errors

The before/after was striking: 247 lines of annotation-heavy Ingress YAML became 89 lines of clean, portable Gateway API config. Zero vendor-specific syntax.

When NOT to Migrate Yet

Your Ingress controller works fine and you have no pain points
You rely heavily on controller-specific features not yet in Gateway API (e.g., advanced rate limiting, custom Lua scripts)
Your team is mid-incident or in a feature freeze
You're running a controller that doesn't yet support Gateway API

The migration isn't urgent — but new services should use Gateway API from day one. Running both in parallel is fully supported and low-risk.

What's Coming Next

Gateway API is actively evolving. Features in development:

BackendTLSPolicy — mTLS between Gateway and backends
Timeouts and retries — Standardized retry config (currently controller-specific)
Session persistence — Cookie-based affinity at the API level

The momentum is clear: every major ingress controller has either shipped or announced Gateway API support. This is the future of Kubernetes networking.

---

Need help designing your Kubernetes networking architecture? Talk to our platform engineering teamTalk to our platform engineering teamhttps://techsaas.cloud/contact or check our infrastructure servicesinfrastructure serviceshttps://techsaas.cloud/services.

#[Kubernetes#Gateway API#Ingress#Networking#Cloud Native]

Need the next owner and evidence step mapped?

Send the current system and deadline. Yash replies with the service path, first proof artifact, and handoff owner.