For most of the last decade, Ingress NGINX has been the default Kubernetes ingress controller. It is widely deployed, well-understood, and free. Kubernetes survey data has consistently put it at or near the top of the most-used ingress controllers in production clusters.

That position changed on March 24, 2026, when Ingress NGINX was archived at KubeCon Europe. The repository will not receive further security patches, which means anyone running it as the front door to their cluster is now operating an unmaintained TLS endpoint. Operators have limited options. Pick another Ingress controller and stay on the frozen Ingress API, or move forward to the Kubernetes Gateway API, the standard and successor of Ingress API recommended by the Kubernetes project itself.

This article is about the second path, using Airlock Microgateway as the Gateway API implementation, with a brief highlight of the benefits and a concrete walkthrough of what changes and what tools help.

Why move to the Gateway API?

Three reasons make the Gateway API a real upgrade rather than a rebranding of Ingress API.

Role-oriented

Its main advantage is structural, not functional. Gateway API splits routing into three typed resources, each owned by a different role:

  • GatewayClass: Owned by the infrastructure provider, the team that installs and operates the Gateway API implementation in the Kubernetes cluster. Describes the kind of gateway the cluster supports.
  • Gateway: Owned by the cluster operator. The concrete listener configuration that decides which ports are exposed, which TLS certificates terminate traffic, and which hostnames are accepted.
  • HTTPRoute: Owned by the application developer. Defines how traffic is routed to a specific application through a Gateway listener. Application developers can also configure Microgateway security policies for these routes.

Fields in Gateway API resources are validated at admission time, and the boundaries between roles are enforced by RBAC. Unlike the annotations used in Ingress NGINX, where a typo only surfaces hours later in the Kubernetes cluster, a misconfigured field is caught the moment you run kubectl apply.

Vendor-agnostic

Gateway API is a Kubernetes specification, not a controller-specific configuration model. Conformance tests verify that different implementations expose the same API semantics and behave the same way for the supported feature sets. So, moving from one conformant implementation to another can start with a change of gatewayClassName while the other resources stay untouched. The Gateway API specification is shaped by a working group with contributors from many organizations and product teams. This means each resource was reviewed from many angles before it became part of the standard, and the resulting design is more mature than what any single project would have produced on its own.

Ecosystem

Because Gateway API is a standard, new tools have emerged and existing tools have extended their capabilities to support it, without requiring vendor-specific workflows. The same day-to-day tooling you already use for Kubernetes now applies to Gateway API as well. Examples include:

  • ingress2gateway: A conversion tool to translate Ingress API and provider-specific resources (CRDs) to Gateway API resources.
  • gwctl: A command-line tool for managing and understanding Gateway API resources.
  • Headlamp: A user-friendly Kubernetes UI focused on extensibility which also provides a Gateway API plugin.
  • cert-manager: A cloud native certificate management tool with native Gateway API support since 2024.
  • ArgoCD, FluxCD, Kyverno, OPA, and others: Many other tools have also extended their capabilities for Gateway API and are worth looking into.

The combined benefit of the ecosystem and vendor-agnostic configuration is significant. Your resources are portable across Gateway API implementations, and the surrounding tools keep your workflow portable as well.

The general conversion workflow

The migration happens in three steps and uses ingress2gateway to simplify this process.

Note: If you use Homebrew, brew install ingress2gateway is the quickest installation method on macOS and Linux. For other platforms and installation methods, see the official installation guide.

1. Convert the Ingress API resources

Retrieve the Ingress API resource from your cluster and convert it to Gateway API resources:

kubectl get ingress <MY-INGRESS-RESOURCE> -o yaml | \
  ingress2gateway print \
  --providers=ingress-nginx \
  > gateway-api-resources.yaml

This example shows the basic conversion flow. Run ingress2gateway help to see additional commands and conversion options. The tool emits a warning for every annotation or field it could not translate to standard Gateway API resources. Review each warning before applying the generated resources.

2. Deploy and verify

It is highly recommended to run kubectl apply --dry-run=client before applying the resources to your cluster. This lets you catch and correct errors before they reach the API server.

After applying the resources, use gwctl get gateway and gwctl get httproute to check the status of your Gateway API resources. Look for Programmed: True on the Gateway, and Accepted: True and Resolved: True on each HTTPRoute. If anything is off, use gwctl describe on the affected resource to inspect its conditions and listener-specific status.

3. Test

Finally, test the migrated traffic path end to end before cutting over production traffic. Use gwctl get gateway <GATEWAY-NAME> to retrieve the Gateway address, then send test requests to that address with the expected Host header.

curl -H 'Host: <hostname>' https://<gateway-address>/<path>

Compare the responses with the existing Ingress or current production endpoint. When the behavior matches, update DNS or your traffic routing configuration to point to the Gateway address. After the cutover is complete and verified, remove the old Ingress resources.

Ingress to Gateway API migration example

The following Ingress configuration is used as an example to show how a migration to Gateway API can work. It defines an Ingress for the FQDN app.company.com, terminates TLS at the edge, redirects HTTP traffic to HTTPS, and exposes two services, foo-svc under /foo and bar-svc under /bar. The illustration below shows the shape of this setup.

The corresponding Ingress NGINX configuration is stored in example-ingress.yaml and looks like this:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - app.company.com
      secretName: app-company-com-tls
  rules:
    - host: app.company.com
      http:
        paths:
          - path: /foo
            pathType: Prefix
            backend:
              service:
                name: foo-svc
                port:
                  number: 80
          - path: /bar
            pathType: Prefix
            backend:
              service:
                name: bar-svc
                port:
                  number: 80

Install the CRDs and Airlock Microgateway

To test the migrated configuration, the cluster needs the Gateway API CRDs and a conformant Gateway API implementation such as Airlock Microgateway. The Gateway API CRDs define the standard resources such as GatewayClass, Gateway, and HTTPRoute. Airlock Microgatway is the controller that watches these resources and configures the actual data plane.

1. Install the Gateway API CRDs

Deploy the Gateway API CRDs in your cluster.

kubectl apply --server-side \
  -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.0/standard-install.yaml

2. Install a conformant Gateway API implementation

This walkthrough uses Airlock Microgateway. 

helm install airlock-microgateway \
  oci://quay.io/airlockcharts/microgateway \
  --version 5.1.0 \
  --namespace airlock-microgateway-system \
  --create-namespace \
  --wait

Convert the Ingress API resources

The conversion process is split into two steps. First, ingress2gateway converts the existing Ingress manifest into Gateway API resources. Then, review the generated configuration to understand how the original Ingress concepts map to Gateway and HTTPRoute resources.

1. Convert the Ingress configuration

Convert the Ingress NGINX configuration shown above, stored in example-ingress.yaml, into Gateway API resources and write the result to example-gateway-api.yaml:

ingress2gateway print \
  --providers=ingress-nginx \
  --input-file example-ingress.yaml \
  > example-gateway-api.yaml

The tool prints a warning for every annotation or field it could not translate to a standard Gateway API resource. Review these carefully before proceeding. Each warning requires a manual decision.

Example output:

┌─ WARN  ────────────────────────────────────────
│  Gateway API does not support configuring URL normalization (RFC 3986, Section 6). Please check if this matters for your use case and consult implementation-specific details.
│  source: STANDARD_EMITTER
└─

2. Review the generated Gateway API configuration

The generated Gateway and two HTTPRoute resources look roughly like this, with gatewayClassName set to Airlock Microgateway.

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-1.1.0
  name: my-ingress
spec:
  gatewayClassName: airlock-microgateway
  listeners:
    - hostname: app.company.com
      name: app-company-com-http
      port: 80
      protocol: HTTP
    - hostname: app.company.com
      name: app-company-com-https
      port: 443
      protocol: HTTPS
      tls:
        certificateRefs:
          - group: ""
            kind: Secret
            name: app-company-com-tls
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-1.1.0
  name: example-app-company-com
spec:
  hostnames:
    - app.company.com
  parentRefs:
    - name: my-ingress
      port: 443
      sectionName: app-company-com-https
  rules:
    - backendRefs:
        - name: foo-svc
          port: 80
      matches:
        - path:
            type: PathPrefix
            value: /foo
    - backendRefs:
        - name: bar-svc
          port: 80
      matches:
        - path:
            type: PathPrefix
            value: /bar
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-1.1.0
  name: example-app-company-com-http
spec:
  hostnames:
    - app.company.com
  parentRefs:
    - name: my-ingress
      port: 80
  rules:
    - filters:
        - requestRedirect:
            scheme: https
            statusCode: 308
          type: RequestRedirect
      matches:
        - path:
            type: PathPrefix
            value: /foo
    - filters:
        - requestRedirect:
            scheme: https
            statusCode: 308
          type: RequestRedirect
      matches:
        - path:
            type: PathPrefix
            value: /bar

The following illustration shows the generated Gateway API configuration and how requests flow through the Gateway and HTTPRoute resources:

The Ingress tls block becomes a certificateRefs entry on the HTTPS listener. The two path rules become matches on a single HTTPRoute attached to that listener. The HTTP-to-HTTPS redirect becomes a second HTTPRoute attached to the HTTP listener with a RequestRedirect filter.

Deploy and verify

Deployment and verification are split into two steps. First, apply the generated Gateway API resources to the cluster. Then, verify that the Gateway and HTTPRoutes are accepted and ready to serve traffic.

1. Apply the Gateway API resources

It is recommended to run a dry-run before applying the resources to your cluster. This lets you catch and correct errors before they reach the API server.

kubectl apply --dry-run=client -f example-gateway-api.yaml

If the dry-run passes, apply the generated Gateway API resources:

kubectl apply -f example-gateway-api.yaml

During the migration, the Gateway API resources can run in parallel with the existing Ingress NGINX if they do not compete for the same external address and port combination.

2. Verify the status

After applying the resources, use gwctl get gateway and gwctl get httproute to check their status:

gwctl get gateway my-ingress -o wide
gwctl get httproute example-app-company-com -o wide
gwctl get httproute example-app-company-com-http -o wide

Look for Programmed: True on the Gateway, and Accepted: True plus Resolved: True on each HTTPRoute. If anything is off, use gwctl describe on the affected resource to inspect its conditions and listener-specific status.

Test connectivity

Finally, test the migrated traffic path end-to-end before switching production traffic. Use gwctl get gateway my-ingress to retrieve the Gateway address, then send test requests to that address with the expected Host header.

curl -H 'Host: app.company.com' https://<GATEWAY_ADDRESS>/foo
curl -H 'Host: app.company.com' https://<GATEWAY_ADDRESS>/bar

Compare the responses with the existing Ingress or current production endpoint. When the behavior matches, update DNS for app.company.com or your traffic routing configuration to point to the Gateway address. After the cutover is complete and verified, remove the old Ingress resources.

Picking an implementation: Airlock Microgateway

While conformant Gateway API implementations are interchangeable on standard resources, vendors differentiate through extra capabilities. Key differences typically lie in platform integration, observability, operational tooling, software supply chain, support model, and advanced capabilities beyond traffic routing.

Airlock Microgateway combines a conformant Gateway API implementation with Kubernetes-native Web Application and API Protection (WAAP) and identity-aware access control. In addition to routing, it can protect web applications and APIs, validate identities and tokens, enforce access policies, and provide security telemetry. Configuration is declarative and integrates with existing GitOps and DevSecOps workflows.

This makes Airlock Microgateway particularly suitable for teams that do not only want to replace Ingress NGINX, but also want to integrate application and API security directly into their Kubernetes architecture.

Key capabilities include:

  • Kubernetes-native integration: Airlock Microgateway runs directly in Kubernetes and uses the Gateway API as the configuration standard for traffic routing. Its Operator and Custom Resource Definitions integrate with established GitOps and DevSecOps workflows.
  • Observability: ECS-formatted logs, Prometheus metrics, Grafana dashboards, and OpenTelemetry-based tracing provide visibility into traffic and Gateway behavior.
  • Secure software supply chain: Airlock Microgateway container images are signed with Cosign and can be verified before deployment.
  • Application and API protection: Beyond Gateway API routing, Airlock Microgateway provides Web Application and API Protection (WAAP), including protection against OWASP Top 10 attacks, OpenAPI specification enforcement, GraphQL schema validation, and request rate limiting.
  • Identity-aware access control: OpenID Connect, JWT, OAuth 2.0 Token Exchange, and client certificate-based authentication allow access decisions to be enforced before requests reach the application.
  • Transport security: Airlock Microgateway supports TLS protection including hybrid post-quantum key exchange with TLS 1.3.

Ready to test Airlock Microgateway?

Explore Airlock Microgateway at your own pace with our license-free Community Edition, or unlock advanced security features with a free Evaluation License.

Request Evaluation License      Talk to an Expert

Information for you

-Our whitepapers-
White paper: The puzzle pieces of modern authentication

White paper: The puzzle pieces of modern authentication

Identity management is like a puzzle: you have to understand the big picture, identify the relevant pieces and put them together in the right order. This white paper shows how to do that.

 

Request white paper

Whitepaper: How to make cIAM a success

Increasing requirements for security and user-friendliness make Customer Identity and Access Management an essential. Read our whitepaper to find out how you can secure your competitive advantage with the right CIAM strategy.

 

Request whitepaper

Whitepaper: Security for cloud-native applications

You can read about how companies can ensure the security of web applications and APIs in Kubernetes in the white paper "Security for cloud-native applications", which was created in collaboration between heise and Airlock.

 

Request whitepaper

Whitepaper: Zero Trust is a journey

The ongoing digital transformation of the world is progressing and having a profound impact on our personal and professional lives in ways that were difficult to imagine just a few years ago.


This white paper discusses the effects of continuous digitalization and its impact.

Request free of charge

Off to DevSecOps

In this white paper, you will learn the most important insights into how you can implement DevSecOps successfully and efficiently, which security components are required for this and the advantages of a microgateway architecture.

 

Request free of charge

Airlock 2FA - Strong authentication. Simple.

Double security - this is what two-factor authentication offers in the field of IT security.


Find out more about strong authentication and the possibilities offered by Airlock in our white paper.

Download for free

Further whitepapers

We provide you with free white papers on these and other topics:

 

  • Successful IAM projects
  • compliance
  • Data protection (DSGVO)
  • Introduction of PSD2
  • PCI DSS requirementsPCI DSS requirements
Request free of charge