Migrate from Ingress NGINX to Gateway API: what the move involves
The resource conversion is the smaller part of moving off Ingress NGINX. The larger part is deciding what happens to each annotation, which controller will replace the retired one, and how traffic moves between them without an outage. Effort therefore scales with the annotation footprint and the cutover plan more than with the number of Ingress objects. A cluster that still routes traffic through the retired controller carries Ingress resources, controller-specific annotations that change request behavior, and TLS secrets referenced by those Ingress objects. All three must move, and each carries a different kind of risk.
Gateway API splits what a single Ingress object combined into separate resources owned by different roles. A GatewayClass names the controller implementation. A Gateway defines listeners, ports, protocols and TLS termination, and is usually owned by the platform team. HTTPRoute objects define host and path matching and backends, and are usually owned by application teams. This separation changes who edits what. It also means one annotation may map to a Gateway field, a route filter, a policy attachment, or to nothing at all, depending on the implementation you choose. Confirm that mapping in the implementation's documentation before you estimate the work.
Start with an inventory. List every Ingress object, every annotation key in use, and every TLS secret, then group the annotations by behavior: rewrites, timeouts, body size limits, authentication, rate limits, canary routing and backend protocol settings. The ingress2gateway tool can convert many standard Ingress fields and report some annotations it cannot translate, but its output needs review before it is deployed. Check each converted route with test requests against the old and new paths, and record every difference in behavior, including headers, status codes and timeouts.
Controller choice follows from the annotations you found. An implementation that supports the features your estate depends on, verified against your own test routes, reduces the work more than any conversion script does. Plan the cutover with both controllers running, lower DNS time to live ahead of the change, and move a small set of hostnames first. Keep the old Ingress resources and controller in place until rollback is no longer needed. Write down who owns each step: the platform team owns Gateways and certificate references, application teams sign off their routes, and a named person owns the rollback decision.
Which Ingress NGINX features map to Gateway API and which do not
This table compares common Ingress NGINX features with their Gateway API equivalents and marks where the mapping is clean, partial or missing. Read the status column first, then treat every annotation row as a claim to test on your chosen implementation. The main takeaway is that core routing, TLS and class selection translate directly, while most annotation-driven behavior depends on the implementation and needs a verified replacement.
| Ingress NGINX feature | Gateway API equivalent | Mapping status |
|---|---|---|
| Ingress resource | HTTPRoute attached to a Gateway | Maps for host and path routing. Convert the object shape, then review each rule. |
| ingressClassName | GatewayClass and Gateway gatewayClassName | Maps. Confirm the chosen controller is installed and reconciles the class. |
| TLS secrets in spec.tls | Gateway listener with certificateRefs | Maps for certificate references. Confirm how the implementation reloads rotated secrets. |
| Host rules | HTTPRoute hostnames and listener hostname | Maps cleanly. Check that hostname matching across listeners behaves as your current rules expect. |
| pathType Exact and Prefix | PathMatch Exact and PathPrefix | Maps cleanly. Test trailing slash and nested path behavior before cutover. |
| pathType ImplementationSpecific | RegularExpression match or implementation-specific matching | Does not map cleanly. Regex syntax and behavior vary, so test each rule individually. |
| Canary weight annotations | Weighted backendRefs in HTTPRoute, plus header matches | Partial. Weighted splits map directly, but confirm each implementation's support for header-based canary rules. |
| Rewrite, rate limit, auth, body size and timeout annotations | Implementation filters or policy resources | Does not map cleanly. Confirm support for each annotation in the chosen implementation. |
| configuration-snippet and server-snippet annotations | No standard equivalent | Does not map. Redesign the behavior as a supported policy or an application change, and never copy snippets verbatim. |
How ingress2gateway converts resources and what it leaves for you
The ingress2gateway tool reads existing Ingress resources and emits Gateway API objects, such as Gateway and HTTPRoute resources, that your team can review and apply. Its purpose is to shorten the translation work for the hosts, paths, backends and TLS references you already run, so reviewers spend their time on routing behavior instead of retyping YAML. Treat its output as a starting draft. The core Ingress fields are the easiest part to map. The harder part is that Ingress NGINX adds much of its behavior through controller-specific annotations, and a converter can only carry over what it knows how to translate. Plan the migration around that gap from the first run.
Annotations are where most of the review effort belongs. Ingress NGINX relies heavily on annotations for URL rewriting, request body size limits, timeouts, authentication, redirects and custom configuration snippets. Expect the tool to translate some of these categories into Gateway API filters or policies, to report others as unsupported, and to skip some with only a log message or no message at all. A clean run does not prove that every annotation was carried over. Before you rely on the output, check the tool's own documentation for the annotation keys it handles, what it emits for each one, and where its warnings are written so you can collect them as part of the change record.
Confirm several details in the tool's documentation before you plan around it. Check the current release version, the input sources it accepts (a live cluster, exported manifests or both), the output options and any provider-specific settings, and how it names and groups the generated objects. This page does not state those details, and they can change between releases. Record the exact tool version and the command-line options you used in the migration change record, so the conversion can be reproduced during review and repeated if the source Ingress objects change before cutover.
Compare the generated manifests with what the live cluster actually serves. Export the current Ingress objects, then check hostnames, path matching rules, TLS secret references and backend services against the generated Gateway and route objects. Review the controller's global settings as well, because options set in the Ingress NGINX ConfigMap apply across all routes and will not appear in any Ingress object the converter reads. For each unsupported or ignored annotation, record either a replacement in the target implementation or a documented decision to drop it. The conversion also does not select a Gateway API implementation, set its addresses or define how traffic moves between the old and new controllers, so those decisions stay with your team.
Tools and documented paths for the conversion
These tools cover conversion, validation and selection, and each produces a different output. None of them migrate live traffic, so the cutover plan is separate work. Confirm current versions and install steps with each project before you run them against a cluster.
ingress2gateway for draft manifests
ingress2gateway reads existing Ingress resources and generates draft Gateway API objects, such as Gateways and HTTPRoutes. It gives you a starting point from which to inventory what your Ingresses define, and you still review every generated object. Check the output for annotations the tool does not translate, since those must be handled by hand or by your chosen implementation. Confirm the current release and install method with the project.
Ingress NGINX annotation reference
The Ingress NGINX annotation reference lists what each annotation does, such as timeouts, body size limits, rewrites and authentication settings. Build a table from your own Ingresses that maps every annotation in use to its behavior and to the Gateway API field or implementation-specific setting that replaces it. Annotations without a direct equivalent become decisions for your team, and they often influence which implementation you select. Confirm the reference matches the controller version you run.
kubectl dry-run and server-side validation
Client-side dry-run checks that generated YAML parses and matches the schema kubectl knows. Server-side dry-run sends the object to the API server, which validates it against the installed Gateway API CRDs and admission controls without storing it. Run server-side validation in a non-production cluster that uses the same CRD versions as production, because a passing check against different CRDs proves little. Neither check confirms that a route will behave as the old Ingress did.
Gateway API CRDs and conformance information
The Gateway API CRDs define the resource types your manifests use, including GatewayClass, Gateway and HTTPRoute. Conformance information for the Gateway API project shows which implementations pass the upstream tests and which features each one supports. Use it to shortlist implementations against the features your annotation inventory requires, then verify those features in a test cluster. Check which CRD version and release channel each implementation expects before you install anything.
Cutover remains your responsibility
None of these tools move live traffic. ingress2gateway writes draft manifests, validation checks them, the CRDs and conformance information inform your choice, and the annotation reference explains behavior. Traffic moves only when you change DNS, load balancer or ingress routing, and that step needs its own rollback plan, parallel run and monitoring. Plan that step separately from the conversion work.
How to choose a Gateway API implementation for your annotation set
The first decision is which annotations your estate actually uses, because that inventory sets the shortlist. Gateway API is a specification, and each controller implements a subset of it. Ingress NGINX users relied on many behaviors expressed as annotations, such as rewrites, body size limits, timeouts and authentication hooks. The specification has no standard field for many of these, so each implementation covers them through its own extensions, custom resources or filters, or does not cover them at all. Export the annotation usage from every Ingress object, group it by behavior, and mark which behaviors the converted routes must keep. Then check each candidate against that list line by line.
Next, decide whether you need policy attachment for authentication and rate limits. In Gateway API, policies attach to Gateways, listeners or routes through objects that differ between implementations, so the same intent may be written in different ways and may be supported only in certain controller releases. Ask who will own those policy objects, whether they live in Git next to the routes, and how the team will detect a policy that fails to attach. Ask each vendor to show the attachment status of a test policy on a test route, and confirm that the status is visible to the platform team without cluster admin access.
Third, examine how the controller integrates with the load balancer and certificate management. Ingress NGINX often ran behind a load balancer or node ports that the platform team had already set up, so the replacement may need a different service type, a new external address or a changed firewall rule. Confirm how the controller obtains its external address, whether it reads TLS material from the same Secrets used today, how certificate renewal reaches the listeners without a restart, and whether the cluster's network policies allow the new data path. Write these answers down before the pilot starts, because they often decide the cutover window.
Fourth, choose an operating model the platform team can support. Check the controller's release cadence, how it handles upgrades of its own custom resources, which logs and metrics it exposes, and where its troubleshooting documentation lives. Decide who will answer a production incident at two in the morning and whether that person has access to the controller's configuration. Because the controller sits on the request path, its own upgrade plan belongs in the selection decision, not in a later phase.
Before committing, run a conformance and feature check against your own route set. Take a representative sample of converted routes, including the most annotation-heavy ones, deploy them to a non-production cluster running each candidate, and compare responses, headers, redirects, timeouts, body limits and authentication outcomes with the live Ingress NGINX behavior. A conformance suite result shows that the controller meets the specification, but it does not test your behaviors. A clean ingress2gateway run shows only that the conversion produced objects. It does not prove that the target controller handles those objects the same way. Record every difference as accepted, fixed or blocking.
The sequence: inventory, convert, pilot, parallel run, cutover and decommission
The sequence moves traffic from Ingress NGINX to Gateway API in stages, so each change can be checked and reversed while the old controller still serves production. Each phase ends with a written artifact that the next phase depends on.
Inventory every ingress dependency
The platform team lists every Ingress, IngressClass, controller annotation, ConfigMap setting, TLS secret, external DNS record and load balancer that the Ingress NGINX controller touches. Application owners confirm which routes carry production traffic and which are unused. The output is a single inventory that maps each host and path to its owner, its certificate source and its external entry point, and it becomes the baseline for every later check.
Confirm cluster version and upgrade path
Before any conversion work, the platform team checks the cluster's Kubernetes minor version against the supported releases on the Kubernetes release page. If the cluster is behind, it plans the upgrade first, because the version skew policy requires kube-apiserver to move one minor version at a time and allows kubelets to be up to three minor versions older. The output is a documented upgrade path, or written confirmation that the current version is supported and the Gateway API CRDs install cleanly.
Install Gateway API CRDs and controller
The team installs the Gateway API custom resource definitions at the version the chosen implementation supports, then deploys the selected Gateway API controller in its own namespace. It confirms that the controller reconciles a test Gateway and HTTPRoute, and that it can reach the load balancer or node ports it will use. The output is a running controller with a non-production Gateway that passes these checks, and a record of the CRD and controller versions.
Convert and review manifests per namespace
The team runs ingress2gateway against exported Ingress resources, one namespace at a time, and reviews each output manually. Reviewers check hostnames, path matching, TLS references, and every annotation the tool does not translate, which must be re-implemented with policies or filters. Changes go through version control and review. The output is a reviewed set of Gateway and route manifests per namespace, plus a list of annotations that needed manual work.
Pilot one low-risk service
The team picks one internal or low-traffic service and serves it through the new Gateway while the old Ingress still exists. They test routing, TLS, redirects, timeouts, header handling and health checks against the same expectations as the current route, and they record any differences. The pilot owner signs off on the results. The output is a pilot report that lists each behavior compared, the outcome, and the fixes applied to the conversion rules or manifests.
Run both controllers in parallel
Both controllers run together, with each route served by one controller at a time and the new Gateway configured with the same hostnames and certificates. The team compares response codes, latency, logs and error rates for each migrated route, and confirms that DNS and load balancer targets are unchanged. Any mismatch is fixed in the manifests before traffic moves. The output is a parallel run log showing that each route behaves the same under both controllers.
Cut over traffic in steps
The team moves traffic to the Gateway in groups, starting with the least critical namespaces, and keeps the old Ingress definitions and DNS settings ready to restore. Each group has an owner, a change window and a rollback instruction written before the change. Monitoring is watched after every step before the next group moves. The output is a cutover record showing each group, the time it moved, its checks, and any rollback taken.
Decommission Ingress NGINX after rollback closes
Once every route has run on the Gateway for the agreed observation period and the rollback plan is formally closed, the team removes the Ingress NGINX controller, its IngressClass, its load balancer and its stale Ingress objects. It also removes any unused TLS secrets and DNS records and updates the platform documentation and monitoring. The output is a decommission checklist signed by the platform and application owners, and a confirmed inventory showing no remaining Ingress NGINX dependencies.
How to run both controllers in parallel and cut traffic over
Run both controllers at the same time, each behind its own entry point, so Ingress NGINX keeps serving today's traffic while the Gateway API implementation is proven on the same hostnames. In practice, the existing Ingress NGINX controller keeps its Service and external load balancer address, and the new Gateway implementation gets its own Gateway resource with a separate address. Review the Ingress and Gateway resources side by side before applying anything, and confirm that no two resources claim the same hostname in a way that could split traffic unexpectedly. Record both addresses in a cutover inventory that lists every hostname, its owner and the entry point it uses today.
Choose one method for moving hostnames and use it for the whole cutover, so operators read one set of signals. The first method is a DNS record change per hostname, where the record moves from the old address to the new one after its TTL has been lowered in advance. The second is weighted routing at the load balancer or DNS platform, which sends a fraction of requests to the new entry point. The third is a dedicated test hostname that only the new path serves, used by internal testers and a small client group before the production name moves. Weighted routing details differ by load balancer and DNS platform, including record types, weight granularity and how health checks interact with weights. Confirm each capability with your provider before you design the sequence.
Certificates must work on both paths before any traffic moves. Each hostname needs a certificate that both controllers can present, either from the same Kubernetes TLS Secret referenced by the Ingress and the Gateway listener, or from a second copy issued by the same certificate authority. Check the full chain, the subject alternative names and the expiry on each entry point with a test client that sets the server name explicitly, because a path that answers with a default certificate can look healthy in a basic probe. At the load balancer, configure health checks for each entry point against the controller's readiness and backend health signals. Add weight to the new path only after its targets pass consistently through the observation window your team agreed.
Monitor each path separately from the first moment it receives traffic. Label or segment metrics by entry point or controller so error rates, latency percentiles and request volume for the Ingress NGINX path and the Gateway path can be compared hostname by hostname. Set thresholds for 5xx responses, timeouts and tail latency before the first shift, and agree who watches them and who may stop the shift. Compare the new path against a baseline taken from the old path over the same period, since traffic mix changes through the day. Confirm with your platform team which monitoring stack collects controller metrics in your environment, because metric names and labels vary between controller implementations.
Write a rollback step for each hostname before its first shift, and rehearse it in a non-production environment. The step should name the exact record or weight to change, the value it returns to, how long clients may take to see the change given the TTL, and the person authorized to run it. Keep the Ingress resources and the old controller running until every hostname has stayed stable through the agreed window, because removing them early removes the fastest rollback path. Lower TTLs speed rollback but increase resolver load, so decide the TTL for each hostname and record that choice in the cutover plan.
What drives the cost and duration of an Ingress NGINX migration
This table lists the factors that change how much work a move from Ingress NGINX to Gateway API takes, who carries each cost, and what to request in a written quote. Read each row against your own cluster inventory, because the count of resources, annotations and environments usually matters more than the controller itself. Most of the effort sits in converting and verifying routing behavior, not in installing new components.
| Driver | Why it changes effort | One-time or recurring, and who pays | What to ask for in the quote |
|---|---|---|---|
| Ingress resources and hostnames | Each Ingress, host and path needs a converted route and a verification test before cutover. | One-time. Client staff time for inventory, DeployOpen for conversion and testing within agreed scope. | Itemized count of Ingress objects, hostnames and paths, and the conversion method for each. |
| Annotations, snippets, canary and header routing | Custom NGINX annotations and snippets often have no direct Gateway API equivalent and need redesign. | One-time. Mostly DeployOpen design and build; client signs off on behavior changes. | A list of annotations and snippets with a mapping decision for each, plus canary and header rules. |
| TLS and certificate automation | Certificate issuance, renewal and secret references must move to the new listeners and routes. | One-time for rewiring. Recurring cost for certificate operations, paid by the client. | Confirmation of the certificate manager, secret names, renewal checks and listener changes. |
| IngressClasses and namespaces | Each class and namespace layout affects how many gateways, policies and rollouts are needed. | One-time. Shared between client platform staff and DeployOpen in the design phase. | The class-to-gateway mapping, namespace ownership model and any cross-namespace access rules. |
| External DNS and load balancer changes | Address changes, health checks and DNS records shift traffic and can extend the change window. | One-time. Client pays for DNS and network changes; DeployOpen plans the sequence. | Named DNS records, load balancer resources to be changed, and the rollback path for each. |
| Observability and alerting | Dashboards, alerts and log parsing often reference Ingress NGINX metrics and must be rebuilt. | One-time for rebuild. Recurring for alert tuning and on-call effort, paid by the client. | A list of existing dashboards and alerts, with the metrics each one depends on. |
| Kubernetes version of the cluster | The version determines which Gateway API versions and CRDs can be installed and how upgrades are sequenced. | One-time if an upgrade is needed first. Client pays for cluster upgrades unless scoped. | Current minor version, planned upgrades, and the Gateway API CRD version to be installed. |
| Team experience with Gateway API | Teams new to Gateway API need more design review, training and pairing during build. | One-time for enablement. Client staff time, with DeployOpen knowledge transfer in scope if agreed. | Stated skill level, training hours included, and the handover method for runbooks. |
| Number of environments to cut over | Each environment repeats conversion, testing and cutover, so effort scales with environment count. | One-time per environment. Client approvals and DeployOpen delivery both repeat per environment. | Environment list, the cutover order, and whether testing is repeated or reused across them. |
What usually goes wrong during the move and how to prevent it
Most failed ingress migrations break in the same few places: behavior that carried over without anyone noticing, cleanup that ran before traffic was proven, and ownership that was never assigned. The cards below name each risk and give a check the team can run before cutover and after it.
Assuming annotation parity
Ingress NGINX annotations for authentication, rate limiting and rewrites do not map one to one onto Gateway API resources, and ingress2gateway converts only what it recognizes. Export every annotation from the live cluster, not only from manifests in Git, and mark each one as converted, replaced by a policy or unsupported. Test each route with requests that trigger auth failures, throttled clients and rewritten paths, and confirm the target implementation supports each policy you need.
Removing Ingress NGINX too early
Deleting the old controller or its Ingress objects removes the fastest way back. Keep Ingress NGINX running until the new route has carried production traffic through a full cycle of your normal usage patterns. Write the rollback steps as a runbook with a named owner, and rehearse reverting one route in a staging cluster before the production window. Remove the old resources only after the team signs off on that evidence.
Certificate gaps on the new listener
A Gateway listener needs its own TLS configuration, and the certificate that served an Ingress host may not be referenced by the new listener. Inventory every hostname and secret used by Ingress NGINX, then confirm each listener references a certificate that covers that exact name. Check the certificate chain and renewal automation for the new secret references. Test each hostname from outside the cluster before any DNS change, because mismatches often appear only for clients that send a specific server name.
Forgotten IngressClass and controller defaults
Clusters often run more than one ingress controller, and an Ingress with no class name may depend on a controller-specific default. When the new Gateway implementation is installed, check which IngressClass is marked as default and whether any Ingress relied on that default. List every IngressClass and GatewayClass in the cluster, decide which controller owns each hostname, and confirm the new controller does not claim routes that still belong to the old one.
DNS TTLs that slow rollback
A cutover made by DNS change is only as fast to reverse as the cached lifetime of the record. Lower the TTL on the affected records well before the change window, and confirm the lower value is visible from the resolvers your clients use. Record the old load balancer address in the runbook so the team can point back quickly. Clients that cache longer than the TTL or ignore it still reach the old address, so keep the old path serving until that tail has passed.
Kubernetes version drift
Gateway API CRDs and controller releases each support a range of Kubernetes versions, and a cluster outside that range can block CRD installation or leave the controller unable to start. Check the cluster version against the compatibility statement in the chosen controller's release notes and against the Kubernetes version skew policy before installing. Kubernetes currently maintains minor releases 1.35 through 1.37, so an older cluster may need an upgrade first, and that work belongs in the migration plan.
Questions teams ask before migrating from Ingress NGINX
How is the cost of migrating from Ingress NGINX set?
Cost is set by the written scope, which reflects how many annotations your Ingress resources use, how many routes and hosts you run, and how complex the cutover is. DeployOpen does not publish a price list, so a quote follows from the scope agreed in writing before work starts.
Ask the quote to separate:
- One-time work, such as inventory, conversion, testing and cutover
- Recurring work, such as a support retainer or continuous testing
Simple clusters with plain Ingress resources and a few hosts need less review than clusters with custom snippets, authentication annotations, or several controllers sharing one load balancer. Ask for the assumptions behind each line item, the environments covered, and how the price changes if the inventory shows more annotations than expected.
How long does an Ingress NGINX to Gateway API migration take?
The duration depends on the factors that set cost: annotation count, route count, cutover complexity, the number of clusters and environments in scope, and how quickly your change windows and approvals move. DeployOpen confirms the timeline during scoping, using the effort factors in the scope rather than a fixed figure.
Ask for the phases, the dependencies on your team, and which items could extend the schedule. Plan for a parallel run in which the old controller and the new implementation both serve traffic, since that period usually governs the calendar more than the conversion itself. Also confirm whether the timeline includes the review time your security and change teams need.
What does our team need to provide before a migration starts?
Before work starts, your team provides read access to the inventory of Ingress resources, annotations, TLS secrets and controller configuration, along with access to the clusters in scope. You also need to confirm who owns the DNS records and the load balancer or external address that traffic reaches, because cutover changes where requests land.
A change window must be agreed for each cutover, with a rollback path and named approvers. Expect to name a contact for each application owner who can confirm expected behavior for their routes. Confirm during scoping which of these your organization can grant and how long approvals take, since missing access or unclear ownership can hold up a cutover.
Can our own team migrate from Ingress NGINX without a partner?
Yes, if your engineers already know Gateway API well enough to review converted resources and choose an implementation. The ingress2gateway tool converts many Ingress resources and annotations into Gateway API objects, but its output needs review, especially for annotations with no direct equivalent.
A staged plan works best:
- Inventory everything first.
- Convert a non-production namespace.
- Run both controllers side by side.
- Move traffic one route group at a time, with a tested rollback.
Your team needs working skills in Gateway API resources, the chosen implementation, TLS and DNS cutover. If those skills are thin, a partner can cover conversion and cutover while your team learns the new model.
What happens to the converted manifests after the migration is done?
The converted manifests become yours. They should live in your version control, pass through your normal review and deployment path, and serve as the source of truth for routing once traffic has moved. Your team owns their upkeep, including new routes, certificate references and changes needed when the implementation is upgraded.
Ask for the converted resources, a record of each annotation that needed a manual decision, and the test evidence for each cutover. If you would rather have someone maintain the routing layer over time, ongoing support, upgrades and continuous testing are available as retainers. Remove the old Ingress resources and the retired controller only after the new path has run cleanly through your agreed observation period.
Which Ingress NGINX annotations usually need manual work?
Annotations that set controller-specific behavior, such as custom configuration snippets, authentication hooks, and rewrite or timeout settings, usually need a design decision before conversion. Their Gateway API equivalent may use a different object, a filter, or an implementation-specific policy, so the converter output is a starting point.
During inventory, group each annotation into one of three buckets: converts directly, converts with review, or needs a redesign. Ask for this list before the quote is final, because it is the clearest indicator of effort. Confirm with your chosen Gateway API implementation which features it supports, since support for a given behavior varies by implementation.
Will the migration cause downtime for our applications?
Downtime depends on how the cutover is designed, not on the conversion itself. A well-staged plan runs the new path alongside the old one, moves a small set of routes first, and shifts DNS or the load balancer target only when each group has passed its tests.
Illustrative example: a team with one shared hostname might route a single test path through the new gateway, watch it for an agreed period, then move the remaining paths in batches. Ask how each step is verified, how long traffic can run on both paths, and how the rollback is triggered. The scope should state these steps in writing, so your change board can approve them before the window opens.
How DeployOpen scopes, delivers and supports the migration
DeployOpen treats the move from Ingress NGINX to Gateway API as a planned change to your cluster's traffic path, carried out in infrastructure you control. Engagements are fixed-scope, so the inventory, conversion decisions, cutover steps and deliverables are agreed in writing before work starts. Ongoing support and upgrades are available as a retainer after cutover.
How we scope
- Inventory of Ingress resources, annotations and controller-specific settings across the namespaces in scope
- Mapping of each annotation to a Gateway API field, an implementation-specific feature or a documented gap
- Written scope listing the clusters, gateway implementation, deliverables and timeline agreed before work starts
How we build
- Conversion of Ingress manifests with ingress2gateway, followed by manual review of every generated resource
- Selection and installation of a Gateway API implementation sized for your traffic profile and TLS requirements
- Staging test plan covering routing, TLS termination, headers, timeouts and body size limits
How we hand over
- Parallel run with a rollback path, using DNS or load balancer switching and documented cutover steps
- Runbooks for routing changes, certificate renewal and retiring the old controller safely
- Documentation of converted resources, unsupported annotations and decisions, delivered to your team
How we support
- Post-cutover monitoring checks for error rates, latency and certificate status during the agreed window
- Optional retainer for upgrades, Gateway API version changes and ongoing security testing of ingress paths
- Confirm in writing who owns the controller, DNS and certificate processes after handover

