Kubernetes Gateway API

Kubernetes Gateway API gives platform and application teams separate, role-based resources for cluster ingress. This page explains when to adopt it, how to choose an implementation and what to plan before cutover.

On this page

When Kubernetes Gateway API fits your cluster ingress

Kubernetes Gateway API is the Kubernetes networking interface for describing how traffic enters a cluster and reaches services, and teams usually need it when one Ingress object can no longer carry the routing decisions that platform and application teams both have to make. If your cluster is self-managed and several teams publish HTTP or TLS routes through shared load balancers, the Ingress model often forces platform rules, TLS settings and application paths into the same object, with behavior that depends on the controller in use. Gateway API splits that work into separate resources so each team edits only what it owns.

The model has three core resource types. A GatewayClass names the controller implementation that manages gateways of a given kind, and is usually owned by the platform team. A Gateway describes the listeners, ports, protocols, TLS certificate references and the namespaces allowed to attach routes, and is typically owned by platform operators. Route resources, such as HTTPRoute for HTTP and TLSRoute or GRPCRoute for other protocols, are owned by application teams and attach to a Gateway that the platform has approved. The attachment rules on the Gateway are the main control point for who may publish under which hostnames.

Ingress may still be enough when the cluster has one team, a small number of hostnames, simple path routing and no need for delegated ownership. It is also a reasonable fit when your ingress controller already provides every behavior you rely on and you have no plan to move between controllers. Moving to Gateway API adds resources to review, new controller behavior to test and a migration period in which both models may run side by side, so the case should rest on a concrete ownership or policy problem.

Before you commit, confirm three things with your implementation vendor and in your own environment. First, check which Gateway API version and conformance profile the controller you select supports, because feature coverage differs between implementations and between release channels. Second, list the routing features your applications actually use, such as header matching, traffic splitting, redirects or backend TLS, and verify each one against the controller. Third, decide who approves changes to GatewayClass and Gateway objects and how that approval is enforced in your cluster, since role separation is only effective when the permissions match the design.

Kubernetes Gateway API resources and who owns each

Gateway API splits cluster ingress into resources with different owners, so the design question is less about which objects to create and more about who may change each one. The cards below cover each resource kind, how the objects reference one another, and the checks to run before you assign ownership.

GatewayClass and the platform team

A GatewayClass names a controller implementation and is usually cluster-scoped, so it belongs to the platform team. It selects which controller reconciles Gateways that reference it. Before you create one, confirm which controller your chosen implementation registers under its controller name, and confirm which parameters it accepts. Restrict who can create or edit GatewayClass objects, because a change there affects every Gateway that uses it.

Gateway and listener ownership

A Gateway is the entry point that the controller provisions, with listeners for ports, protocols, hostnames and TLS settings. Platform teams typically own it because it sets the shared load balancer address and certificate policy. Check which namespaces the Gateway's allowed routes selector accepts, because that setting controls which application teams can attach routes. Confirm how your implementation provisions the underlying proxy and load balancer service in your environment.

HTTPRoute and application team routes

An HTTPRoute defines host and path matching, header rules and backend references for one application. Application teams usually own these objects in their own namespaces, so they can publish changes without a platform ticket. A route attaches to a Gateway through its parentRefs field, and the Gateway must accept it through its listener rules. Review which filters and match types your implementation supports before you let teams rely on them.

Other route kinds and CRD installation

Gateway API defines other route kinds, such as GRPCRoute, TLSRoute, TCPRoute and UDPRoute, but the set you can use depends on the Gateway API CRDs installed in the cluster and on what the implementation supports. Confirm the CRD version and the route kinds your implementation reconciles before you publish a route standard. Routes of an unsupported kind may be accepted by the API server yet never take effect, so test each kind in a non-production cluster first.

Attachment status and reference grants

Route and Gateway status fields report whether each attachment was accepted and whether backend references resolved. Cross-namespace backends and certificate references need a ReferenceGrant from the namespace that owns the target, which keeps the decision with the owner of that resource. Platform teams should review these grants and monitor status conditions, since a rejected route fails silently from the application team's point of view.

Access control and change review

RBAC should separate the platform team's rights over GatewayClass and Gateway objects from the application teams' rights over routes in their namespaces. Without that split, an application team could alter listeners or hostnames that other tenants depend on. Ask your implementation which admission checks it offers and whether your cluster's policy engine can enforce hostname ownership, then document the decision in your runbook.

Choosing a Kubernetes Gateway API implementation

This table compares the factors that separate Gateway API implementations, from route kind coverage to how each one provisions traffic entry points in your network. Read each row against your own routing needs and the platform team's operating model, then confirm every claim in each candidate's conformance report and current documentation before shortlisting.

Decision factorWhat to checkWhen it fits
Conformance coverageWhich route kinds (HTTPRoute, GRPCRoute, TLSRoute, TCPRoute, UDPRoute) and features the implementation passes in its published conformance report for your Gateway API versionChoose an implementation that passes every route kind your applications need, and avoid relying on features the report marks as unsupported or experimental
In-cluster controller or managed serviceWhether the controller runs inside your clusters and you operate its upgrades, or a provider runs the control plane in your cloud accountAn in-cluster controller fits teams that want version control and data paths inside their own infrastructure; a managed service fits teams that accept provider operations in exchange for less controller upkeep
Load balancer and proxy provisioningHow the Gateway resource creates the data plane: cloud load balancers, node ports, or proxy pods, and which network segments can reach themChoose cloud-provisioned load balancers when your cloud account supplies them, and proxy pods on bare metal or air-gapped networks where you control the addresses and firewall rules
TLS certificate handlingWhere certificates are referenced from Gateway listeners, how they are issued and rotated, and whether a certificate manager integrates with the controllerPick an implementation that reads certificates from Secrets you already manage when your PKI or cert-manager is the source of truth
ObservabilityMetrics, access logs and traces the data plane emits, how they are exposed for scraping, and whether route-level status is visible for application teamsPrefer implementations whose metrics and access logs fit your existing monitoring stack, especially where route status must be reviewed by application owners
Support and release modelWho answers incidents, the supported Kubernetes and Gateway API versions, the upgrade cadence and the documented security response processMatch the support model to your change windows and to who will be on call for ingress failures, and confirm the terms in writing before committing

Splitting platform and application team responsibilities

The main decision in this split is which fields the platform team controls and which fields application teams can change without a ticket. In Gateway API, the platform team usually owns the GatewayClass that names the controller implementation and the Gateway objects that define the shared entry point. On each Gateway, the platform team sets listener ports and protocols, the TLS certificate references each listener presents, and the rules that decide which namespaces may attach routes. Application teams own the HTTPRoute objects in their own namespaces, including host matching, path and header rules, and the backendRefs that point to their Services. Write this boundary down before the first route is created, and confirm with your chosen implementation which fields it validates and which it accepts without checks.

Route attachment is controlled from the Gateway side. Each listener carries an allowedRoutes setting that accepts routes from the same namespace, from namespaces matching a label selector, or from all namespaces. A label selector is often the practical middle ground, because the platform team can admit only namespaces labeled for a given product area, and a team that loses the label stops attaching. References that cross a namespace boundary are a separate control. A route that points to a Service in another namespace, or a Gateway that points to a TLS Secret elsewhere, needs a ReferenceGrant created in the target namespace by the owner of that resource. The owner of the target therefore decides what can be reached, and the platform team should not create those grants on behalf of application teams without review.

Gateway API objects are ordinary Kubernetes resources, so the RBAC already in the cluster governs them. Bind the platform group to create and update GatewayClass, Gateway and listener configuration in the gateway namespace, and bind application groups to HTTPRoute verbs in their own namespaces only. Secrets need separate attention. The controller resolves each certificateRefs entry, so its service account must be able to read the referenced Secret, and that access should be scoped to the namespaces where certificates live. Application teams should have no list or get access to those TLS Secrets. Existing Secrets controls still apply, including encryption at rest and least-privilege list and watch access, because Secrets are stored unencrypted in etcd by default unless you configure encryption.

Illustrative example: the platform team creates a Gateway named public in an edge namespace, with an HTTPS listener for shop.example.com, a certificate Secret in edge, and allowedRoutes set to namespaces labeled product=storefront. The storefront team creates an HTTPRoute in its own namespace that matches the hostname and the /api path prefix and points to a Service in the same namespace, so no ReferenceGrant is needed. A route from a namespace without that label should be reported as not accepted, and a route that points to a Service in another team's namespace should fail until that team creates a ReferenceGrant. Before go-live, check the attachment status conditions on each route, run access checks for each group, and confirm how your implementation reports rejected routes.

Setting up Kubernetes Gateway API in your cluster

This sequence takes a cluster from no Gateway API resources to a verified external route, installed in the order each component depends on. Each step ends with a check, so problems are found and fixed before the next layer is added. Confirm your Kubernetes version support in the implementation's own documentation before you begin.

  1. Confirm cluster and networking support

    Confirm that the cluster can host the implementation you chose before installing anything. Check that your Kubernetes version appears on the implementation's supported list, using that project's documentation, because support differs between implementations and releases. Identify how the Gateway will receive external addresses, such as a cloud load balancer, an on-premises load balancer or a bare-metal address pool, and confirm the IP range and DNS zone that will front it. Ask your network team which firewall paths are open to those addresses. Done when you have written answers for each prerequisite and each one is met.

  2. Confirm the control plane is healthy

    Verify that the API server, etcd and scheduler report healthy before any controller is added. Run the API server readiness check with verbose output and confirm every node reports Ready. Controllers that start against an unhealthy control plane can fail in confusing ways and leave partial resources behind. Confirm that etcd members are healthy and that a current etcd backup exists before you change cluster state. Done when the readiness checks pass, all nodes are Ready and the backup is recorded.

  3. Install the Gateway API CRDs first

    Install the Gateway API custom resource definitions at the version your chosen implementation requires, before any GatewayClass, Gateway or route manifest is applied. Do not default to the newest release, because the implementation documentation names the version it supports. Use the release channel the implementation documents, and enable experimental resources only if it asks for them. If an older CRD set already exists, confirm the upgrade path with the implementation first, since existing objects depend on those definitions. Done when the gateway.networking.k8s.io resources are listed at the expected version.

  4. Deploy the implementation controller

    Install the controller that reads Gateway API resources and programs traffic. Use the method the implementation documents, typically a Helm chart or a manifest set, and pin the image version so upgrades stay deliberate. Run the controller in its own namespace with a service account that holds only the permissions it needs. If the cluster has no internet access, mirror the controller images to your private registry first and point the install at that registry. Done when the controller pod is Running and Ready and its logs show no startup errors.

  5. Define the GatewayClass

    Create the GatewayClass resource that names the controller, using the controller name the implementation documents exactly. Platform engineers own this object because it determines which implementation serves every Gateway that references it. Set class parameters only as the implementation documents them. Done when kubectl describe on the GatewayClass shows the Accepted condition as True. If Accepted is False, read the reason and message, which usually point to a controller name mismatch or a missing CRD.

  6. Create the Gateway and its listeners

    Declare the Gateway in the namespace owned by the platform team and reference the GatewayClass. Define each listener with a name, port, protocol and hostname that matches your DNS plan. Restrict allowedRoutes to the namespaces permitted to attach routes, so application teams cannot claim listeners outside their scope. For TLS listeners, reference the certificate secret issued by your certificate process. Done when the Gateway reports Accepted and Programmed conditions and has received an address from the load balancer.

  7. Attach a test route

    Create an HTTPRoute in a test namespace that forwards to a simple test Service with a known response. Set parentRefs to the Gateway and the listener name, and match a hostname from your DNS plan. Keep the route minimal so that any failure points to the platform path. Done when the route reports Accepted and ResolvedRefs conditions for its parent Gateway. A route that is accepted but returns no traffic usually indicates a backend selection problem or a hostname mismatch.

  8. Verify conditions and external reachability

    Check status conditions on every object, then test from outside the cluster. Confirm the Gateway address is assigned, DNS resolves the test hostname to that address and an HTTP request from the intended network returns the test response. Test from the network segment users will actually use, because firewall rules can allow in-cluster traffic while blocking external traffic. Record commands, output and component versions in your runbook. Done when external requests succeed for the hostname and TLS listeners present the expected certificate.

How to move routing off Ingress without an outage

The safe way to leave Ingress is to run the old and new routing paths side by side, prove the new one with real traffic under test names, and only then move production hostnames across in steps. Retiring the Ingress object comes last, not first. Start by inventorying every Ingress resource in the cluster and in each namespace, including the IngressClass it uses, its TLS secrets, its backends and every annotation. Annotations are where most of the work hides. They are defined by the ingress controller implementation, not by the Ingress API itself, so an annotation that rewrites paths, sets timeouts, controls body size or configures authentication on one controller has no automatic equivalent on another. Record what each annotation does, which teams depend on it and whether it is still needed.

Next, map each Ingress to Gateway API resources. The platform team typically owns the GatewayClass and the Gateway, which define the listeners, ports, TLS certificates and which namespaces may attach routes. Application teams own HTTPRoute objects that match hostnames and paths and forward to Services. Filters and policies that an annotation used to express must be translated into the features your chosen implementation supports for HTTPRoute filters or its own policy resources. Where a behavior has no supported equivalent, decide whether to change the application, accept the difference or keep that one route on the old controller until the gap is closed. Write this mapping down as a table per application so reviewers can check it line by line.

Run both paths in parallel. Give the new Gateway and its routes a separate test hostname, point it at the new implementation's address and send synthetic and manual test traffic through it while production stays on Ingress. Verify TLS chains, redirects, header handling, timeouts, large uploads, WebSocket or gRPC traffic where used, and authentication behavior against the same backend. Before any production hostname is shared between two controllers, confirm how your ingress controller and Gateway implementation handle overlapping hostnames during the transition. Some combinations will reject or ignore a route that claims a hostname already served elsewhere, and some will accept both and split traffic in ways you did not intend. Check this in a non-production cluster and record the result. Confirm also which controller owns the load balancer address and whether both can coexist on the same ports.

Shift traffic in steps. Lower DNS TTLs well ahead of the change, then move one non-critical hostname at a time by changing its DNS record or the weight at your load balancer. Keep the previous target available so the change can be reversed by one DNS or weight edit. Watch error rates, latency, certificate status and application logs after each step before moving the next, and set in advance what counts as a rollback signal. Once every hostname has run on the Gateway path for a full business cycle agreed with the application owners, remove the Ingress objects, then the old controller and its IngressClass. Keep the Ingress manifests in version control until the cutover has been accepted, so the previous configuration can be recovered and audited.

Securing Kubernetes Gateway API listeners and TLS

Gateway API moves listener and certificate decisions across platform and application teams, so the security boundary sits in namespace rules, RBAC, Secrets and the audit trail. The cards below cover the controls Kubernetes documents for this boundary and the checks to run before a Gateway serves production traffic.

Restricting which namespaces attach routes

A Gateway listener can declare which namespaces are allowed to attach HTTPRoute and other route objects to it, through its allowedRoutes setting. Choose the narrowest option that fits the ownership model, such as routes from the same namespace or routes from namespaces labeled by the platform team. Confirm in your implementation's documentation how it evaluates these selectors and whether labels on namespaces are protected from application teams.

Least-privilege RBAC for Gateways and routes

Gateway API resources are ordinary Kubernetes objects, so access to create, update or delete them is controlled with RBAC roles and bindings. Platform teams should own GatewayClass and Gateway objects, while application teams get permissions only on routes in their own namespaces. Review who can patch Gateways, because changing a listener's hostname, port or TLS reference can alter exposure without touching any route.

Handling TLS certificates as Secrets

Listener TLS certificates are referenced from Kubernetes Secrets, and the Secrets good practices documentation states that Secrets are stored unencrypted in etcd by default. Configure encryption at rest for the API server, restrict get, list and watch on Secrets with least-privilege RBAC, and decide whether certificates come from an external store through the Secrets Store CSI Driver. Confirm how your certificate manager rotates and renews these Secrets.

Controlling cross-namespace references

Gateway API lets a route or Gateway reference objects in another namespace, such as a certificate Secret, only when a ReferenceGrant in the target namespace permits it. Use these grants to keep certificate ownership with the platform team and to limit which backends a route may reach. Audit existing grants regularly, because a broad grant can expose Secrets or Services to namespaces that should not see them.

Logging changes to Gateway resources

API audit logging records requests to the Kubernetes API server, so create, update, patch and delete calls on Gateway, listener and route objects can be captured when the audit policy covers those resources. Decide the audit level for Secret and Gateway writes, where the logs are stored, and how long they are retained. Confirm that your audit policy records changes to ReferenceGrant objects as well, since those change what cross-namespace references are allowed.

Operating Gateway API after go-live

After go-live, the Gateway API stack needs the same recurring care as any other cluster component, and the most common failure is treating it as finished once routes work. The implementation controller, its data plane proxy or load balancer, and the Gateway API CRDs each follow their own release cadence, and all three must stay compatible with the Kubernetes version running in your clusters. Schedule these as planned operational work with named owners, a regular upgrade review and a non-production environment that runs each upgrade before production does.

Kubernetes ships roughly three minor releases a year on a cycle of about 14 weeks, and the project maintains the three most recent minors. The version skew policy requires kube-apiserver to be upgraded one minor version at a time, before kube-controller-manager, kube-scheduler and kubelets, and allows kubelets to be up to three minor versions older than kube-apiserver. Schedule controller upgrades into the same change windows. Gateway API upgrades can also depend on CRD version changes that must be applied before the controller is upgraded. Confirm the required order, the CRD versions, any storage version steps and any minimum Kubernetes version in the implementation's release notes before each upgrade, then rehearse the sequence in a non-production cluster.

Routine health checks should cover three layers. First, the controller: pod restarts, leader election, and reconciliation errors in its logs. Second, the Gateway API objects: GatewayClass, Gateway and route status conditions, particularly the Accepted and Programmed conditions on Gateways and the parent status on routes. A route that is accepted but not programmed usually points to a data plane problem, while a route that is not accepted often points to a parent reference, namespace permission or listener mismatch. Third, the data plane: request rates, error codes, upstream latency and configuration reload failures from the proxy or load balancer, exported to your monitoring system with alerts. Alerting on condition changes, not only pod state, catches problems before route owners report them.

Gateway listeners that terminate TLS usually reference certificates stored in Kubernetes Secrets, so each certificate has an expiry date the platform team must track. Decide who issues and renews these certificates, whether that is cert-manager, an internal certificate authority or a documented manual process. Confirm how your chosen implementation picks up a renewed Secret, since some reload automatically and others need a restart or rollout. Alert well before expiry, and test renewal in staging, including client trust chains and any backend TLS settings. Keep listener references stable so that renewal does not force changes to route resources, and record which application teams depend on each hostname.

Ownership needs to be written down before the first incident. The platform team typically owns the controller installation, GatewayClass, shared Gateways, the proxy or load balancer, certificates and the upgrade calendar. Application teams own their route objects, backend services and the hostnames they request, within the namespaces and attachment rules the platform team allows. Each team needs its own runbook. The platform runbook covers controller restart, rollback, CRD upgrade steps, certificate rotation and load balancer failover. The application runbook covers checking route status, reading condition messages and escalating to the platform team. Review both runbooks after each Kubernetes or controller upgrade, and rehearse them at least once before go-live is considered complete.

What to confirm before you commit to Kubernetes Gateway API

Gateway API replaces Ingress with resources that split responsibilities between platform and application teams, but the standard sets only a baseline. Each card below is a question to answer for the implementation you are considering, using its documentation, conformance results and a test in your own environment.

Supported route kinds and features

Gateway API defines several route kinds, and implementations differ in which ones they accept and which optional features they implement. Ask the vendor or project for its conformance report and a feature matrix for the exact version you plan to run. Then map each Ingress rule your applications depend on to a route kind and feature, and mark any gap that needs a workaround or a different implementation before the design is fixed.

CRD installation and ownership

Gateway API resources are delivered as custom resource definitions, which must exist before any GatewayClass or Gateway can be created. Some distributions install them by default and others leave that work to the operator, and the installed version may differ from the one your implementation expects. Confirm which CRD version is present, who owns its lifecycle, and how upgrades will replace it without removing resources that routes still reference.

Kubernetes version support

An implementation publishes the Kubernetes versions it is tested against, and that list rarely includes the newest release on the day it ships. Check the supported range against your current cluster version and the version you plan to reach along your upgrade path. The version skew policy also limits how far kubelets may lag the API server, so confirm the implementation works with the same upgrade order your cluster follows.

Load balancer and network fit

A Gateway is usually exposed through a load balancer, which may come from a cloud controller, a bare-metal load balancer or an appliance in your data center. Confirm how the implementation requests and programs that load balancer, which IP address ranges and DNS records it needs, and whether health checks, source IP preservation and TLS termination points fit your firewall and network design. Test failover before production traffic depends on it.

Protocol features beyond HTTP

Many services need more than HTTP routing. List every gRPC, raw TCP, UDP and TLS passthrough requirement before you choose an implementation. Passthrough and TLS termination decide where certificates live and whether the gateway can inspect traffic, and non-HTTP route kinds may have a different maturity level or be missing in some implementations. Confirm each protocol with a test that uses your real client libraries and certificates.

Ingress annotation equivalents

Ingress controllers often rely on vendor-specific annotations for timeouts, rewrites, body size limits, authentication and rate limits. Gateway API standardizes common behavior but leaves many of these as implementation-specific policies or filters. Inventory every annotation in use, and for each one look for a standard field, a vendor policy or an application change. Record the ones with no equivalent so the migration plan covers them.

What drives the effort of a Kubernetes Gateway API project

Effort in a Gateway API project depends less on writing GatewayClass, Gateway and route manifests than on the work around them. The one-time components are discovery and inventory of the existing ingress estate, including Ingress objects, controller-specific annotations, TLS secrets, DNS records and external load balancers. Next come implementation selection and a proof of concept against a representative route, followed by the platform build: installing the Gateway API CRDs at the version your chosen implementation supports, deploying its controller, configuring networking to the cluster's load balancer and issuing certificates. Ask each bidder to show which of these items their quote covers and which they expect your team to provide.

Migration is the largest one-time block and it is usually priced per route group, not per cluster. Each group needs its routes translated, its TLS configuration checked, its health checks confirmed and its cutover sequenced. A security review sits across all of them: who may attach routes to a Gateway, which namespaces may use which listeners, how TLS versions and cipher settings are set, and how backend access is limited with network policies. Testing and cutover then confirm behavior under real traffic, usually with old and new paths running side by side until the old ingress can be retired. Ask for the test plan and rollback steps as deliverables, not as informal practice.

Some costs recur for as long as the gateway runs. Gateway API CRDs and the controller need upgrades, and the Kubernetes version skew policy requires kube-apiserver to move one minor version at a time, so gateway upgrades must be planned against each cluster upgrade. Kubernetes ships roughly three minor releases per year, which means the platform team will schedule this work repeatedly. Certificate rotation is another recurring task, and it must be automated or owned by a named team. Ongoing support, monitoring of the controller and periodic review of route ownership are recurring too. Request a support model that states who handles each of these items and how fast a change request is handled.

Several factors push effort up. The number of applications and hostnames sets the size of the migration inventory and the testing matrix. Heavy use of implementation-specific annotations raises effort because each one must be mapped to a standard field or to a custom policy, and some may have no direct equivalent. Multi-cluster designs add gateway placement, shared certificate management and consistent policy across clusters. Compliance evidence requirements add the work of recording configuration, access decisions and change history in a form an auditor can review. Before accepting a quote, confirm which of these drivers your environment has, and ask the partner to list the assumptions their scope depends on.

Kubernetes Gateway API questions buyers ask before hiring help

Does Gateway API replace Ingress immediately?

Not necessarily. Gateway API uses its own set of resources, so an existing Ingress setup can keep running while you build Gateway resources alongside it. Ingress is the older interface, and a cluster may run both during a transition, but each route should move only after it has been tested. Your ingress controller's documentation and your cluster version determine which resources are available and how the two interact. Confirm three things before planning: which controller serves your current Ingress traffic, whether that controller supports Gateway API, and whether the annotations your Ingress objects rely on have equivalents in your target implementation. Those answers show how much of the migration is translation and how much is new design.

How much effort does a Gateway API adoption take?

Effort depends mainly on the number of routes, how much behavior lives in controller-specific annotations, and how many teams own routes. A small cluster with a few plain HTTP routes is mostly a translation exercise. Work grows when Ingress objects use vendor annotations for rewrites, authentication, rate limits or header handling, because each one needs a target equivalent or a redesign. TLS certificate management, DNS changes, load balancer provisioning and monitoring also add work.

Drivers to examine: route count, annotation usage, TLS model, number of namespaces and teams, and how many environments must match production. Ask any partner to break the estimate into inventory, design, build, testing, cutover and handover so you can see where effort sits and what each phase produces.

What does my platform team need to provide for a Gateway API project?

The work needs named owners who can make decisions, not only people who can run commands. Platform engineering owns the GatewayClass, controller installation, shared Gateway resources, load balancer and DNS integration, and the policy that controls which namespaces may attach routes. Application teams own their HTTPRoute definitions and test results. Security and networking staff confirm TLS certificates, exposure rules and firewall paths. You also need access to a non-production cluster that closely matches production, agreed change windows, a current inventory of ingress objects and a person who can approve cutover. Confirm these owners, access paths and approval steps in the written scope before work starts.

Can our internal team adopt Gateway API without outside help?

Yes, a capable internal platform team can do this without outside help, particularly when the cluster is small and the team already runs Kubernetes networking. The gap usually sits in planning and testing more than in manifest writing. Teams most often need outside help when they lack hands-on experience with the chosen implementation, when many applications depend on controller-specific annotations, or when cutover must happen in a regulated window with evidence requirements. Before deciding, check whether the team has tested route behavior in a staging cluster, has a written rollback plan and can staff the work alongside production duties. A fixed-scope engagement covers only the agreed deliverables, so the internal team still owns operation afterward.

How long does a Gateway API project take?

Duration depends on scope and is set in the written agreement, so no general timeline applies. The main inputs are route count, annotation complexity, number of environments, number of owning teams and how many implementations you must compare first. Approval cycles and change windows often set the pace more than build work. A typical scope includes an inventory phase, a design decision record, a build and test phase in non-production, a cutover and a handover. Ask for a plan with dated milestones, the assumptions behind each one and the client dependencies that could move them. DeployOpen works on fixed-scope engagements, so timelines are agreed in writing before work starts, and a quote follows from that written scope.

How do we choose a Gateway API implementation for our cluster?

Choose the implementation by matching it to the features your routes need, your operating model and your support requirements, then test it against your own routes. Start with the features in use, such as traffic splitting, header matching, TLS modes and cross-namespace references. Check each candidate's documentation for conformance and support status for those features. Then evaluate how it integrates with your load balancers, DNS, certificate management and observability, its upgrade path, and whether your team can troubleshoot it. Run the same sample routes through two or three candidates in a lab. Record the results in a decision note so auditors and future operators can see why the choice was made.

How do we reduce cutover risk when moving traffic to Gateway API?

Reduce cutover risk by moving routes in small groups and keeping the old ingress path live until each group passes verification. Start with low-traffic, non-critical hostnames. Verify from outside the cluster using the same DNS names, certificates, headers and authentication flows that users depend on, and compare response codes, latency and error logs against the baseline. Where your load balancer or DNS supports weighted routing, shift a small share of traffic first. Write rollback steps that your on-call team can run without the author present, and rehearse them in staging. Freeze unrelated changes during each window, and agree in writing who approves each stage and what evidence closes it.

What does ongoing support for Gateway API involve after go-live?

Ongoing support covers keeping the controller, the implementation and its CRDs current, tracking the Kubernetes release schedule, and reviewing route changes as application teams add them. Kubernetes ships about three minor releases a year, and the version skew policy requires the control plane to move one minor version at a time, so each gateway implementation's compatibility with your cluster version needs checking on every upgrade. Support can also include certificate rotation review, monitoring rules, runbook updates and incident help. DeployOpen offers ongoing support, upgrades and continuous testing as retainers, so scope, included activities and response expectations are defined in the agreement. Confirm them in writing before you sign.

How DeployOpen scopes and delivers Kubernetes Gateway API work

DeployOpen starts Kubernetes Gateway API work with a written scope that names the GatewayClass, Gateways and routes to be built, and which team owns each. Engagements are fixed-scope, so deliverables and timelines are agreed before build begins. Work runs in your clusters and infrastructure, and ongoing support is available as a retainer.

How we scope

  • The written scope lists every GatewayClass, Gateway and route resource in use, with its owning team.
  • Scope records the Gateway API version and implementation, with supported route types confirmed against its documentation.
  • Client inputs such as TLS certificates, DNS records and load balancer addresses are listed before build starts.

How we build

  • Gateway resources are deployed with the controller chosen in scope, using the Gateway API CRDs your team approves.
  • Platform-owned GatewayClass and Gateway manifests are kept in Git so changes are reviewed before they reach the cluster.
  • Application route manifests are tested in a non-production cluster, including listener, hostname and path matching.

How we hand over

  • Handover documents which team owns each GatewayClass, Gateway, listener and route, and how requests are approved.
  • Runbooks cover adding a listener, rotating a gateway TLS certificate and tracing a route that returns errors.
  • Your team receives the manifests, configuration notes and test results needed to reproduce the setup.

How we support

  • Support retainers can cover controller upgrades, Gateway API CRD version changes and routing changes after go-live.
  • Retainer scope and response expectations are written down, so you know what is covered before an incident.
  • Continuous security testing of exposed routes can be added to check authentication, headers and access controls.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.