Apache APISIX Ingress Controller on Kubernetes

The APISIX Ingress Controller is a separate project that turns APISIX into a Kubernetes ingress. This page covers the decisions, build sequence, effort drivers and checks for running it safely beside your current ingress.

On this page

Apache APISIX Ingress Controller on Kubernetes: when teams need it and why it is harder than it looks

The APISIX Ingress Controller is a separate project that lets Apache APISIX act as the ingress for a Kubernetes cluster. Most of the work is not the installation itself but mapping Kubernetes objects to gateway routes and sequencing the cutover from the controller that serves production today. This section is written for platform teams that want APISIX to handle north-south traffic while an existing ingress controller still carries live requests. The sibling sections cover the gateway plan, migration from other gateways and ongoing upkeep, so the focus here is the Kubernetes-side decisions that determine whether the cutover goes as planned.

Running the controller is not the same as installing the APISIX gateway on virtual machines. In Kubernetes, the controller watches cluster objects and writes configuration into the gateway, so you operate two components with their own release lines. The APISIX downloads page lists APISIX 3.19.0 and the APISIX Ingress Controller 2.2.0 as current releases, and it does not mark either one as long-term support. Confirm the compatibility pairing between a controller version and a gateway version in the project documentation before you pin both in your deployment manifests, and record which pair your team tested. Treat each version choice as a decision with an upgrade path attached, because the two projects do not have to move together.

The first hard problem is ownership of resources. Several teams often write routing objects into the same namespaces, and the controller can only reconcile what it is told to manage. Decide which team owns the hostname, the TLS secret, the backend Service and the gateway-side policy for each route before the first object is applied. Ask the controller team to document how it treats objects it does not manage, and test that a change in one team's manifest cannot silently overwrite another team's configuration. Without this agreement, cutover reviews turn into disputes about which manifest is authoritative.

The second problem is plugin configuration drift. The APISIX documentation describes more than 100 built-in plugins covering authentication, security, traffic control, observability and AI gateway functions, and each one carries its own settings. When plugin settings can be changed through Kubernetes manifests, custom resources and direct Admin API calls, the running state can differ from what your repository shows. Choose one source of truth for plugin settings, restrict direct Admin API changes in production, and run a comparison between the declared configuration and the gateway's live state on a schedule. Repeat that comparison after every controller or gateway upgrade, and check the release notes for changes to plugin schemas.

The third problem is coexistence with the ingress controller already serving production. If two controllers both watch the cluster, they can claim the same host and path, so each one needs a distinct ingress class or equivalent selector. Verify that selection in a test cluster before any traffic moves. Plan the cutover one hostname at a time, start with a low-risk route, keep the existing controller's objects in place until rollback has been tested, and document which DNS or load balancer change moves traffic. Ask your platform team to confirm how the controller version you choose handles ingress class settings on your Kubernetes version.

Which pieces run in the cluster and how Kubernetes objects reach APISIX

An APISIX ingress deployment has four pieces that matter to the cluster team: the gateway pods, the controller that watches Kubernetes, the configuration store and the ingress class that assigns ownership. Understanding how they hand configuration to each other tells you where a route problem starts and which component to inspect first.

APISIX gateway pods

The gateway pods carry client traffic. In traditional mode they listen on port 9080 for client requests and on port 9180 for the Admin API, so both ports need explicit network policy decisions. Confirm with your installed Helm chart which Services expose each port, and decide whether the Admin API is reachable only from inside the cluster. Size the replica count against expected request volume, and plan resource requests for the NGINX worker processes.

APISIX Ingress Controller

The controller runs as a separate workload that watches Kubernetes objects and translates them into APISIX gateway configuration. It does not sit in the request path, so a controller outage does not by itself stop traffic already configured on the gateway. Before installation, confirm against your controller version which Kubernetes resource kinds it reads and which custom resource definitions (CRDs) it installs, because those lists change between releases and determine what your manifests must contain.

etcd cluster in traditional mode

In traditional mode, configuration is stored in an etcd cluster that the gateway reads and the control path writes. Losing etcd quorum stops configuration changes, and corrupted or missing keys break routing until restored from backup. Ask your platform team who owns the etcd cluster, how it is backed up, and whether it is shared with other workloads. If you choose a decoupled or standalone deployment, confirm how the controller's configuration path changes before you commit to it.

Kubernetes ingress class

The ingress class decides which controller owns a given resource. When several ingress controllers run in one cluster, each Ingress or related object must name the class it belongs to, or it may be ignored or claimed by the wrong controller. Define the APISIX class explicitly, document which existing ingress controller keeps which namespaces or hostnames during coexistence, and test that an object without the right class produces no change on the gateway.

Configuration flow from object to route

The controller writes configuration that the gateway picks up. A change flows from a Kubernetes object, through the controller's translation, into the store the gateway reads, and then into live routing. Each hop can fail silently, so verify at each stage: the object's status, the controller logs, the gateway's loaded routes and a test request on port 9080. Build this check into your runbook before the first production route is created.

Which configuration model and coexistence pattern fits your cluster

This table compares the four decisions that most affect how the APISIX Ingress Controller behaves in your cluster: how configuration is stored, which Kubernetes resources carry plugin settings, how it sits beside your current ingress, and how upgrades are sequenced. Read each row as a trade-off, then choose the option your team can operate for the life of the cluster. The main takeaway is that the configuration model decides your long-term upkeep and exposure, so settle it before the first route is mapped.

DecisionWhen it fitsOperational cost
Controller-managed etcd (traditional or decoupled mode)Teams that want routes and plugins synced from Kubernetes objects into a shared etcd cluster and can run that cluster reliably.You own etcd backup, quorum, upgrades and access control, and the Admin API on port 9180 must be kept off untrusted networks.
Standalone mode (file or API driven, no etcd)Teams that prefer configuration as code in Git and want fewer stateful components, accepting that changes flow through a file or API you manage.You own the delivery pipeline that renders and reloads configuration, and you must confirm how the Ingress Controller interacts with this mode before choosing it.
Kubernetes Ingress objects for routing onlySimple host and path routing where plugin behavior is minimal and portability to other ingress controllers matters.Plugin settings beyond basic routing are not expressed in standard Ingress objects, so they must live elsewhere, which raises drift risk.
CRDs for plugin configurationTeams that need authentication, rate limits and other plugin policy versioned alongside routes in the cluster.Manifests become tied to APISIX resource definitions, so migrating away or upgrading CRD versions requires rework and review.
Dedicated APISIX ingress class beside the existing controllerCoexistence where new services adopt APISIX while legacy routes stay on the current controller, with each controller selecting only its own class.Two gateways answer for overlapping hostnames during transition, so you must avoid duplicate routes and track which controller owns each path.
Per-namespace or per-host cutoverMigrations where a whole application or hostname moves at once and DNS or load balancer targets can be switched in a controlled window.Fewer duplicate routes, but DNS or load balancer switching and rollback timing become the main risk, and you must confirm TTLs with your network team.
Lockstep upgrades of controller and gatewayTeams that want one tested version pair and a single change window, and that accept upgrading both together.Every upgrade tests both components at once, so confirm which controller release matches your gateway release before scheduling.
Separate upgrades of controller and gatewayTeams that need to move the gateway ahead of, or behind, the controller to meet security or plugin requirements.You must verify version compatibility per release and test each component's configuration output separately, which adds planning effort.

How to install the APISIX Ingress Controller and bring up the first route

This sequence takes a Kubernetes cluster from an inventory of existing ingress to one low-risk hostname served by APISIX, with each step closed by a check. The result is a tested route, a health-checked upstream and a rollback path that the existing ingress keeps in reserve during the move.

  1. Inventory the cluster and existing ingress

    Your platform team records the Kubernetes version, the ingress classes already in use, every Ingress resource and its hostnames, TLS secrets, annotations and the load balancer in front of each controller. Confirm the controller release you plan to pin supports your cluster version by checking its release notes and compatibility statement, not memory. Decide which ingress class APISIX will own so the two controllers never claim the same resource. The step closes when the inventory is written down, reviewed by the owner of each hostname, and the chosen ingress class is recorded as unused by any existing controller.

  2. Install the gateway and controller at pinned versions

    Install APISIX and the APISIX Ingress Controller into a dedicated namespace using the chart or manifests published by the project. Confirm the chart source and the exact commands against the controller release notes for the version you pinned, and record both version numbers in your change record. Keep the gateway and controller on versions the release notes describe as compatible with each other. The step closes when all gateway and controller pods report ready, the controller logs show it watching the ingress class you chose, and the installed versions match the pinned values.

  3. Restrict Admin API access before exposing traffic

    In traditional deployment the Admin API listens on port 9180 and the client traffic listens on port 9080, so confirm which ports your install exposes and which services they bind to. Replace any default Admin API key with a generated secret stored in your secret manager, and limit access to that port with a network policy that admits only the controller and approved administrators. Do this before creating any public route. The step closes when a request to the Admin API from a pod outside the allowed set is refused, and the default key no longer authenticates.

  4. Create one low-risk Ingress resource

    Choose a internal or low-traffic hostname with a simple path and no authentication requirements, then create one Ingress resource that points to a non-critical backend service using your chosen ingress class. Check whether your install expects standard Ingress resources or APISIX custom resources, since the mapping to routes differs. Apply the resource to a test namespace first. The step closes when the route appears in the gateway configuration, typically confirmed through the Admin API or the configuration sync view, and a request sent through the gateway returns the response the backend gives directly.

  5. Add an upstream with a health check

    Define the backend as an upstream with a health check that probes a path your application exposes for that purpose, and set the thresholds your service owner agrees to. Make sure the health check does not depend on a downstream database that could fail independently of the service. Confirm the check path returns the status the service owner expects. The step closes when the upstream shows the backend as healthy, and when you stop or scale down one backend pod in a test environment, the upstream marks it unhealthy and stops routing requests to it.

  6. Attach one plugin and test valid and invalid requests

    Attach one authentication plugin, such as key-auth or jwt-auth, or one traffic plugin, such as a request limit, to the test route. Choose the plugin that matches the control your security team requires, and confirm its configuration options in the APISIX plugin documentation for your pinned version. Send one valid request carrying the correct credential or within the limit, and one invalid request with a wrong credential or over the limit. The step closes when the valid request succeeds, the invalid request returns the status code the plugin documentation specifies, and both results are recorded in the change log.

  7. Move one hostname while the old ingress serves

    Lower the DNS time-to-live for one hostname well before the change, then point it at the APISIX load balancer or add the new address alongside the old one, depending on how your DNS and load balancers are set up. Keep the existing ingress and its load balancer running throughout, so reverting is a DNS change rather than a rebuild. Watch error rates and latency on both paths for a window your operations team agrees on. The step closes when the hostname resolves to the APISIX path, the old path still returns correct responses when tested directly, and a rollback has been rehearsed.

How to test that routes resolve, plugins apply and the controller fails safely

Start with a written verification plan that ties each Kubernetes object to the gateway state it should produce. For every Ingress resource and every APISIX custom resource in your design, record the route, upstream, plugin chain and TLS binding the controller should create. Then test the chain end to end: confirm the generated route exists in the gateway's configuration, send requests to the host and path and check that they reach the intended upstream service and not a neighbor with a similar name. Include negative cases, such as a path that should return a 404 or a method that a plugin should reject. Plugin behavior needs its own checks: rate limits, authentication and header rewrites should be tested with requests that should pass and requests that should fail. Keep the expected results in version control so that a later change can be compared against the same baseline.

Failure tests show whether the gateway behaves the way you chose, which is not always the default. Delete a test Ingress resource, then apply an invalid one, such as a malformed route or a reference to a missing Secret or Service. Observe whether the gateway keeps serving the last good configuration, drops the route or stops applying changes. Decide this before testing, because the answer determines your alerting and rollback steps. Record what the controller reports in its resource status and logs, and what your monitoring sees. Then restore the valid resource and confirm that traffic recovers without manual edits to the gateway. Repeat these tests after each controller or gateway version change, since the handling of invalid input can differ between releases.

Restart the controller pods and the gateway pods separately, and then together, while sending steady test traffic. Measure dropped requests, the time before the routes are served again, and whether any configuration is lost or duplicated after the restart. In traditional mode, where the data and control planes share one deployment and etcd stores the configuration, also test what happens when etcd is unavailable. Isolate or stop one etcd member first, then the whole cluster for a short window, and check whether existing traffic continues on the configuration already loaded. Check whether configuration changes made during the outage are applied once etcd returns. Confirm the expected behavior with your own etcd setup and the deployment mode you chose, because the result depends on the design, not on the controller alone.

Run the old and new ingress side by side for the same host before any traffic moves. Use a test hostname or a weighted DNS or load balancer split, and compare responses from both paths for the same requests. Check that TLS certificates are served correctly, including the certificate chain, the server name indication match and the expiry date, and that the new path uses the same certificate source your security team approved. Verify that headers are passed as designed: forwarded client address, host, correlation identifiers and any headers added or removed by plugins. Compare response headers too, since security headers are often lost in migration. Document every difference and decide whether each one is expected before cutover.

Confirm every command and every log message against the exact APISIX and Ingress Controller versions you install before you put them in a runbook. Documentation for one release line can differ from another, and log wording changes between releases. Pin the versions in your test plan, record the results of each test with the date, the versions and the configuration revision, and keep those records with your change tickets. Ask your implementation partner or internal platform team to walk through the failure cases with the people who will be paged, so that the expected behavior is agreed before an incident rather than during one.

What drives effort on an APISIX ingress rollout and how to keep it down

This table lists the factors that change how much work an APISIX Ingress Controller rollout takes, why each one matters, and what you can shape early. Read the first column as the estate you already have and the last column as the levers you control, and treat the middle column as the reason a driver costs time.

DriverWhy it raises effortHow to keep it down
Hostnames, services and namespaces to mapEach Ingress host, backing Service and namespace becomes an APISIX route, upstream and sometimes a separate config to review and test. Shared hostnames and cross-namespace references add mapping decisions.Inventory from live cluster data rather than memory, group routes by team or domain, and migrate namespace by namespace in batches.
Existing annotations and controller-specific featuresAnnotations for rewrites, redirects, body limits, timeouts and auth from your current controller must be re-expressed as APISIX plugins or resource fields, and some behaviors may not have a direct equivalent.Catalogue every annotation in use, rank by frequency, and standardize on a small set of plugin patterns before migrating. Confirm each equivalent against the APISIX plugin documentation for your version.
Authentication with identity providers such as Keycloak or Microsoft Entra IDThe openid-connect plugin needs client registration, redirect URIs, token and session settings, and per-route scoping for each identity provider. Machine clients may need introspection or client credentials flows instead of browser login.Agree one identity pattern per route type, reuse a single registered client per environment where policy allows, and pilot one protected application before extending to others.
Number of clusters and environmentsEach cluster and environment needs its own installation, configuration, certificates and verification. Differences between development, staging and production multiply the test matrix.Keep configuration in version-controlled manifests with environment overlays, and deploy identical controller versions to every cluster.
TLS certificate handlingCertificates must be issued, bound to hostnames, renewed and stored in Kubernetes secrets or an external source. Mismatched chains or hostnames often surface only at cutover.Inventory certificates per hostname before migration, choose one issuance and renewal method, and test each certificate on the staging route before DNS changes.
Parallel running and DNS cutoverRunning the existing ingress and APISIX side by side needs traffic comparison, rollback steps and coordination with DNS owners, which adds planning and monitoring work.Shift low-risk hostnames first, keep DNS TTLs and rollback steps documented, and set a clear exit point for the old controller.
Compliance evidence requestsAssessors may ask for change records, access reviews for the Admin API, configuration baselines and logs of routing changes. Collecting these after the fact takes more time than capturing them during build.Define evidence needs with your assessor early, store configuration in version control, and enable audit logging from the first environment. Ask your auditor which artifacts they expect.

How the controller setup changes on managed, self-managed and air-gapped clusters

On managed Kubernetes, the cloud provider runs the Kubernetes control plane, but your team still owns node pools, networking, DNS and the state store that APISIX depends on. The ingress controller usually sits behind a cloud load balancer that Kubernetes provisions from a Service, so exposure decisions are made in cloud networking and in the chart values.

  • Load balancer exposure: the load balancer type, health check path and visibility (internal or public) are usually set through Service annotations. Confirm which annotations your provider supports for the pinned release.
  • Images and charts: images are pulled from public registries over the cluster's egress path or from a private registry in your cloud account. Confirm the pull secrets and egress rules before the first deployment.
  • etcd or state store: the provider does not run etcd for APISIX. Your team owns its sizing, backups, certificates and upgrades, unless the deployment avoids etcd entirely.
  • Identity provider reachability: OpenID Connect redirects reach the browser through the public hostname, while the token and discovery calls run from the gateway pods. Check egress routes, DNS resolution and firewall rules from the cluster subnets to the identity provider.
  • Upgrades: stage changes through a non-production cluster first, then roll node pools and the controller in order. Align the provider's control plane upgrade schedule with your change calendar.

Before go-live, confirm the load balancer annotations, the egress path to your identity provider and the owner of etcd backups.

Limiting who can change routes, reach the Admin API and read secrets

Ingress changes take effect on live traffic, so who can write routing objects, who can reach the controller's configuration interface, and who can read certificates and plugin credentials matter as much as the routes themselves. The controls below cover the ingress layer on Kubernetes. Gateway-wide hardening is covered separately in the APISIX security hardening topic.

Role-based access to ingress objects

Use Kubernetes RBAC to decide which users and pipelines can create, edit or delete Ingress resources and APISIX custom resources in each namespace. Separate the people who own routes from those who manage the cluster, and remove standing edit rights from individuals in favor of deployment pipelines. Check the effective permissions with a test identity for each role before go-live.

Controller service account scope

The Ingress Controller runs under its own service account, which needs read access to the resources it watches and write access to its status fields. Bind it with Roles limited to the namespaces it watches rather than cluster-wide grants where your watch configuration allows. Review the generated ClusterRole and RoleBinding objects from the chart or manifests you deploy, since they define what a compromised controller could reach.

Admin API exposure on port 9180

The APISIX Admin API listens on port 9180 in traditional deployment mode and can change routes, upstreams and plugins. Keep it off public load balancers and ingress paths, and restrict access with Kubernetes network policies so that only the controller and approved administration hosts can connect. Confirm the exposure with a port scan from outside the cluster and from a pod in an unrelated namespace.

Default key replacement before go-live

Default Admin API keys shipped in example configuration must be replaced before the gateway serves production traffic. Generate new keys, store them in your secret store, and mount them into the controller and APISIX pods rather than editing values inline in Helm files. Confirm that no sample key remains in the rendered configuration, in the chart values committed to Git, or in any admin tooling your team uses.

TLS keys and plugin credentials in secrets

TLS private keys, client secrets for the openid-connect plugin and upstream API credentials should live in Kubernetes Secrets or an external secret manager, and be referenced from ingress and APISIX resources by name. Restrict get and list rights on those Secrets to the namespaces and service accounts that need them, and enable encryption at rest for the cluster's Secret store. Decide who rotates each credential and how the controller picks up the new value.

Audit trail for gateway configuration changes

Record who changed each route, plugin setting and certificate, and when. Kubernetes audit logs capture writes to Ingress and custom resources, and the controller and APISIX logs show the configuration they applied. Confirm that audit events are shipped off the cluster, retained for the period your policy requires, and reviewed when routes are added or public paths are opened.

What to monitor, back up, upgrade and document after the ingress goes live

Once the APISIX Ingress Controller is serving traffic, the operating routine decides whether it stays reliable. Start by monitoring four things: the health of the controller pods and the gateway pods, configuration sync errors reported by the controller, certificate expiry for every TLS secret the routes reference, and upstream health as seen by the gateway. Pod restarts and readiness flaps are the earliest signs of trouble, so alert on them rather than waiting for user reports. Sync errors matter more than most teams expect. If the controller cannot translate a Kubernetes resource into a route, the gateway keeps serving the last good configuration, which can hide a broken change for a long time. Confirm which metrics and logs your installed versions expose, and check the APISIX observability documentation for the exact names before writing alert rules.

Backups depend on the deployment mode. If you run traditional mode, the etcd cluster holds the gateway state, so back it up on a schedule and test a restore into a non-production cluster. In that case the Kubernetes objects are not the only source of truth for runtime configuration. Whatever the mode, store the Kubernetes manifests or Helm values that define the gateway resources, the routes, the TLS secrets and the controller settings in version control. Rebuilding the environment should require only the repository, the secrets store and the cluster. Confirm with your platform team where each secret lives and who can read it, because a backup that includes credentials needs the same protection as the original.

Treat the controller and the gateway as two separately versioned components. The Ingress Controller is a separate project from the gateway, and the downloads page lists its own release line, so pin the version of each in your deployment definition and record both in your change log. Upgrade in a staging cluster first, with the same ingress class, plugins and route set as production, and run your test suite against it. Read the release notes for each version before you move, paying attention to changes in resource schemas, plugin behavior and default settings. The downloads page does not mark any release as long-term support, so there is no vendor-defined support window to plan around. Your team must set the upgrade cadence, decide how far behind the current release it is willing to run, and assign an owner to track security advisories.

Documentation is what lets someone other than the original builders operate the ingress. Record who owns each ingress class and which controller instance serves it, so two controllers never claim the same class without a decision. Keep a route inventory that maps each Kubernetes Ingress or APISIX resource to its host, path, upstream service and owning team. Maintain a plugin list for each route, including authentication, rate limiting and any custom plugins, because a plugin change on a shared route can affect many teams. Finally, write a rollback procedure that names the previous controller and gateway versions, the commands or Helm revision to restore, the order of steps, and the check that confirms traffic is healthy again. Rehearse it in staging at least once.

The support model for this stack is covered in the separate upgrades and support topic, including what a support agreement can cover and how it relates to your release cadence. Decide before go-live whether your team will carry the routine described here alone or with a partner, because that choice determines who is on call for controller failures, who approves upgrades and who keeps the runbooks current. Confirm the scope of any support arrangement in writing before you need it.

Questions teams ask before running the APISIX Ingress Controller on Kubernetes

How much does an APISIX Ingress Controller engagement cost?

The cost depends on the written scope, and DeployOpen does not publish a price list, so a quote follows from the agreed scope. The main components are planning and cluster review, installation and configuration in your environment, mapping Kubernetes resources to routes, identity and certificate integration, testing, cutover support and handover documentation. Most of this is one-time work. Recurring costs usually come from a separate support or upgrade retainer, plus the cloud or cluster capacity you run the gateway on. When you request a quote, ask for the scope split by phase, the number of Kubernetes namespaces and ingress resources covered, which environments are included, who performs testing, and which items are optional. Ask how upgrades to the APISIX Ingress Controller are priced after go-live, since that is a recurring activity.

How long does it take to put the APISIX Ingress Controller into production?

The timeline is set by the size of the route inventory, the identity integration, and how cutover will happen, not by the installation itself. Installing the controller in a test cluster is usually the short part. Route count matters because each Ingress, Gateway API or APISIX custom resource needs review, testing and an owner. Identity integration adds time when the identity provider, redirect URIs and token rules must be agreed with another team. A big-bang cutover needs a short change window and a tested rollback. A staged cutover running beside your current controller needs DNS changes, monitoring and a plan for each service. Ask any provider for a timeline tied to these inputs, with the assumptions written down, and confirm how delays from your change board are handled.

Can our own platform team run the APISIX Ingress Controller without outside help?

A small estate with experienced Kubernetes operators and gateway engineers can often run it alone, but the team needs more than general Kubernetes knowledge. The people involved should be comfortable with cluster networking, Services, ingress classes and TLS secrets, and they should understand how APISIX routes, upstreams and plugins map to Kubernetes resources. Someone must also own the Helm release, the RBAC rules, the etcd dependency that sits behind the gateway, and the upgrade calendar. Identity integration needs someone who can work with your identity provider team on client registration and token policy. If no one on the team has run an API gateway in production, plan for outside review of the design and the first cutover. Confirm the required skills against your own platform before deciding.

Can the APISIX Ingress Controller run beside our existing ingress controller?

Yes, the two can run side by side when each controller only handles the ingress resources assigned to it. The usual method is ingress class separation, so each Ingress object names exactly one controller, combined with staged DNS, where a small set of hostnames or a new hostname points to APISIX while the rest stay on the current controller. This lets you move services one at a time and roll back by changing DNS. The trade-offs are two sets of load balancers or endpoints to monitor, duplicate certificates or secrets during the transition, possible confusion over which controller owns a host, and the cost of running two data paths for a period. Agree on a rule for ownership before the first Ingress is created, and confirm how your current controller handles the same class names.

What do you need from our team before the work starts?

The core inputs are cluster access, change windows, identity provider details and certificate sources. Cluster access should be granted to the environments in scope, with least privilege, and you should confirm who can approve Helm releases and namespace changes. Change windows determine when cutover and rollback can happen, so get them agreed early. For identity, you will need the provider type, client registration process, redirect URIs, token claims and the group or role rules that apply to each API. For certificates, confirm where they come from, such as an internal certificate authority, a public issuer or a cloud service, and who renews them. You will also need an inventory of current ingress resources, owners for each service, and the monitoring tools that must receive gateway logs and metrics.

Is the APISIX Ingress Controller engagement the same as the APISIX gateway implementation?

No, they overlap but are not identical. The gateway work covers routes, consumers, authentication, plugins, etcd, deployment mode and observability for the APISIX gateway itself. The ingress controller work builds on that design and adds Kubernetes ownership rules: which namespace owns which route, how Ingress, Gateway API or APISIX custom resources are reviewed, how RBAC limits who can change them, and how changes flow through GitOps or your release process. If you already have an APISIX gateway design, the ingress scope is usually smaller and focused on Kubernetes integration. If you are starting from nothing, plan for the gateway design first. Confirm in the written scope which parts of the gateway design are included and which assume an existing design.

What are the main risks when the APISIX Ingress Controller takes over Kubernetes ingress?

The most common problems come from ownership and configuration, not from the controller binary. Two controllers may claim the same host or class, certificates may be missing for the new hostname, or a route may lose a plugin that the old controller applied. Teams also underestimate the Admin API and etcd, which must be protected and backed up, and the effect of changes made directly in the cluster that the controller later overwrites. Test each service through the new path, compare response codes and latency with the baseline, and keep the old controller available until the rollback window closes. Ask your provider how they validate each migrated route, what evidence you will receive, and how they handle a rollback during business hours.

Which APISIX Ingress Controller version should we deploy?

Choose a version from the official downloads page and confirm it is supported for your Kubernetes version and your APISIX gateway version before installation. The downloads page lists APISIX Ingress Controller 2.2.0, released on August 18, 2026, and APISIX 3.19.0, released on September 28, 2026. The page does not mark any release as long-term support, so your upgrade policy should define which release line you follow and how often you test new releases. Ask whether the controller and gateway versions must match, how the Helm chart is pinned, and how you will test upgrades in a non-production cluster before changing production.

How DeployOpen scopes, builds, hands over and supports APISIX ingress work

DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure, and the APISIX Ingress Controller is handled the same way. We agree the Kubernetes resources, gateway relationship and existing ingress coexistence in writing before work starts, then build, test and hand over a working setup your team can run.

How we scope

  • Engagements are fixed-scope, with the scope, deliverables and timeline agreed in writing before work starts.
  • The written scope lists which Kubernetes clusters, namespaces and ingress resources the APISIX Ingress Controller will manage.
  • We confirm how the Ingress Controller relates to your APISIX gateway and whether it runs alongside your current ingress.
  • Scoping records which routes, plugins and authentication requirements map from Kubernetes resources into APISIX.

How we build

  • We install the APISIX Ingress Controller as a separate project and pin the versions your team agrees to run.
  • We map Kubernetes ingress and custom resources to APISIX routes, upstreams and plugin configuration, then test each mapping.
  • We run the Ingress Controller alongside existing ingress, verifying traffic routing for each service before any cutover.
  • Testing covers routing, TLS, authentication plugins and failure behavior in a non-production cluster first.

How we hand over

  • You receive the deployed manifests or Helm configuration, the mapping of Kubernetes resources to APISIX routes, and the test results.
  • Documentation covers installation steps, upgrade procedure, rollback steps and how to add a new service to the ingress.
  • We walk your platform and operations engineers through the running setup and the runbook before handover is closed.
  • Handover includes a list of open items and the decisions your team owns after go-live.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, scoped separately from the build.
  • A support agreement can cover tracking new APISIX Ingress Controller and gateway releases and testing them before you adopt them.
  • Ask any provider to confirm which Kubernetes versions and ingress resources their support covers before you sign.

Sources and further reading

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.