TCP and UDP stream proxying with Apache APISIX

Apache APISIX can route layer 4 TCP and UDP traffic to databases, message brokers and legacy services once stream mode is enabled. This page covers the configuration, matching, TLS and plugin limits to plan before you build.

On this page

Why teams run TCP and UDP stream proxying with Apache APISIX

A team runs TCP and UDP stream proxying with Apache APISIX when it needs one controlled entry point for databases, message brokers or legacy protocols that HTTP routing cannot carry. APISIX can proxy these layer 4 connections alongside its usual HTTP routes, so the same gateway team can manage access, TLS and upstream selection for traffic that is not web traffic. The first decision is whether this is a real need: if the protocol is HTTP-based, a standard route is usually the better fit, and stream mode adds a second configuration surface to operate.

Stream proxying is off by default. You turn it on by setting apisix.proxy_mode to stream or to http&stream in the configuration, which lets the gateway serve HTTP and stream traffic together. Stream routes then match incoming connections on server_addr, server_port, remote_addr and SNI, so you can separate listeners by port, by source network or by server name. Plan these matching rules before you write any routes, because overlapping matches on one port are the most common source of misrouted connections. Confirm the exact configuration keys and any version-specific behavior against the APISIX stream proxy documentation and your target release.

Apache APISIX is a top-level Apache Software Foundation project released under the Apache License 2.0, which matters if your legal or procurement team reviews open-source terms before adoption. The project's repository lists TCP and UDP proxying among its supported protocols, alongside HTTP, gRPC, WebSocket and MQTT. Your team should confirm which protocol features, such as TLS termination or payload-aware plugins, apply to your specific use case and release, and should test the exact database, broker or legacy client you need to front before committing to the design.

How to enable stream mode in APISIX

This sequence turns on APISIX stream proxying in the data plane, confirms that the stream listeners are active, and checks that client traffic and existing HTTP routes behave as they did before the change. Stream mode is off by default, so each step ends with a check you can record before any stream route goes live.

  1. Record the current proxy mode and listeners

    Before changing anything, the platform owner captures the current configuration file, the ports APISIX listens on, and the HTTP routes that must keep working. Stream proxying is off by default, so the baseline shows the HTTP-only state you will compare against later. Store this snapshot in version control or your change record. The step is done when you can name every client-facing port and every HTTP route that the change must leave untouched.

  2. Set the proxy mode in configuration

    An engineer with write access to the APISIX configuration sets apisix.proxy_mode to stream for layer 4 only, or to http&stream when HTTP routes and stream routes must run on the same gateway. The value belongs in the configuration file for the data plane, which is typically managed through your configuration-as-code pipeline. Confirm with the vendor documentation for your deployment mode how this key is delivered to the data plane. The step is done when the change is reviewed and committed, with no other settings modified in the same change.

  3. Apply the change to the data plane

    The operator restarts or reloads the APISIX data plane according to your deployment mode and the instructions in the deployment documentation, because proxy mode is read when the gateway starts its listeners. Restart one node first when you run several, and keep the rest in service behind your load balancer. Check the process logs for startup errors related to stream listeners or port binding. The step is done when the node reports a successful start and its logs show no listener errors.

  4. Confirm the stream listeners are active

    The operator checks that the expected stream ports are bound on the data plane host, for example with the operating system's socket listing tool, and that the stream subsystem appears in the gateway's startup or status output. Compare the list against the ports you planned for databases, brokers or legacy services. The step is done when every planned port is listening on the expected interface and no unplanned port has appeared.

  5. Test client traffic on the configured ports

    A network engineer sends a test connection from a client network segment to each configured stream port, using a non-production route or a test upstream that returns a known response. Test from the same network zones your real clients use, because firewall rules are often the cause of failures that look like gateway faults. The step is done when the test connection reaches the upstream and the gateway access log records it. If the connection fails, check the security group or firewall rules before changing APISIX.

  6. Verify HTTP routes after http&stream

    When you chose http&stream, the team reruns the HTTP checks recorded in the baseline, covering status codes, authentication behavior, response headers and latency for a sample of routes. Compare results against the snapshot to confirm that enabling stream mode did not change HTTP behavior. Repeat the checks on each node as it is restarted. The step is done when every baseline HTTP route returns the same results as before the change, and any difference is logged and investigated before the next node is updated.

  7. Record the verified state for operations

    The platform owner saves the post-change configuration, the listener list, the test results and the HTTP comparison in the change record and the runbook for the gateway. Confirm with your team how stream listeners are monitored and alerted, since a stream port that stops listening may not show up in HTTP dashboards. The step is done when the record is complete and approved, and the team knows which checks to repeat after every future restart or upgrade.

Stream route options and when each fits

This table compares the stream route matching fields and TLS modes APISIX offers at layer 4, with the workload each one suits and the trade-off it brings. Read each row as a decision: match on the fields your listener can actually expose, then pick the TLS mode that matches who must see the payload.

OptionSuits this workloadTrade-off to plan for
Match on server_portA dedicated listener port for one database or broker, such as a single PostgreSQL or Kafka listenerSimple to reason about, but each backend needs its own port exposed at the gateway, which widens the firewall rule set
Match on server_addrA gateway with several virtual or external addresses that serve different backends on the same port numberDepends on how addresses are assigned at the edge, so confirm the addressing with your network team before relying on it
Match on remote_addrRestricting a route to known client networks, such as a partner range or an internal management subnetClient addresses seen by the gateway may be load balancer or NAT addresses unless the PROXY protocol is in use, so verify what arrives
Match on SNISeveral TLS services sharing one port, each selected by the hostname the client sends in the handshakeOnly works for TLS traffic that carries SNI, so plain TCP protocols cannot use it
TLS termination at the gatewayClients connect with TLS and the backend speaks plain TCP, for example a legacy protocol that cannot handle encryptionThe gateway holds the certificates and sees plaintext, so key handling and the internal hop between gateway and backend need controls
mTLS at the gatewayClients or partner systems must present a certificate before a stream route is reachedCertificate issuance, rotation and revocation become operational work for both sides, and the trust store must be kept current
TLS to the upstreamThe gateway accepts plain TCP from trusted clients but the backend requires encrypted connectionsAdds a second TLS session per connection, and backend certificate validation must be configured and tested
TLS passthrough by SNIAn encrypted service where the backend must terminate TLS itself, such as an end-to-end encrypted broker listenerThe gateway cannot inspect or modify the payload, so payload-level policy, logging and plugins are unavailable for that route

Choosing a pattern for databases, brokers and legacy protocols

Relational database connections are usually TCP, often wrapped in TLS, and they are long-lived and sensitive. Most teams place APISIX in front of a database only when they need a controlled entry point, such as a shared jump path, IP allow-listing or connection auditing. In that case the stream route usually matches on server_port and remote_addr, because the database protocol does not carry a hostname that APISIX can read before the handshake. If the database client negotiates TLS, the choice is between terminating TLS at the gateway and passing the encrypted session through to the database.

  • Passthrough for end-to-end TLS: The gateway routes by server_port or, where the client sends it, SNI, and never sees query content. Certificate verification stays between the client and the database.
  • Termination for inspection of the session: APISIX presents its own certificate and opens a new TLS session upstream. This suits access control at the edge but means the gateway holds keys for that path.
  • Matching on source address: Use remote_addr to restrict which networks may reach the database port, and treat this as a boundary control rather than an identity control.
  • No payload-aware plugins: Expect no per-query rules, rate limits by SQL statement or query logging at layer 4.

Confirm with your database vendor whether its client requires SNI and whether it supports the TLS mode you intend to use before you pick a pattern.

When to send the PROXY protocol to upstreams

Enable the PROXY protocol when an upstream needs the original client address and cannot get it from the connection itself. At layer 4, APISIX opens its own connection to the upstream, so the upstream normally sees the gateway's address as the source. Database access rules, broker authorization lists, audit logs and per-client rate limits built on the source IP all break silently when that happens. APISIX can accept the PROXY protocol on TCP ports and send it to upstreams, so the upstream can recover the real client address from a header before any payload is read. Confirm this is needed for each service before you change anything, because the header is only useful to software that understands it.

The setting can be applied globally or per port, and the choice changes the blast radius. A global setting affects every TCP stream listener, so a single upstream that does not parse the header will start failing every connection on every port. A per-port setting limits the change to the listeners whose upstreams you have tested. For a mixed estate of databases, brokers and legacy services, per-port configuration is usually the safer rollout, with the global setting reserved for a fleet where every upstream has been verified. Check the exact configuration keys for your APISIX version in the stream proxy documentation before you write them into configuration as code.

Before rollout, the upstream must be configured to parse the PROXY protocol, and the header version it expects must match what APISIX sends. Many servers need an explicit listener option to accept the header, and some reject ordinary connections once it is enabled, so the change should be tested on a staging listener first. Also decide which network paths can reach the upstream without the gateway, because a client that bypasses APISIX and sends its own header could spoof a source address. Restrict the upstream listener to the gateway's addresses, then confirm with a test connection that the logged source address matches the real client.

Which plugins work at layer 4

Stream routes carry raw TCP and UDP bytes, so most of the HTTP plugin catalog has nothing to act on. The plugins that do run at layer 4 either read a protocol payload or handle the connection itself, and each one depends on what the gateway is allowed to see.

mqtt-proxy for MQTT payloads

The mqtt-proxy plugin reads MQTT packets on a stream route so the gateway can route a client by its MQTT identity rather than only by IP address and port. That means the gateway parses the CONNECT packet, so it must see unencrypted MQTT traffic or terminate TLS first. Confirm which MQTT versions and routing keys your APISIX release supports before you design device session handling around it.

xrpc for custom binary protocols

The xrpc plugin lets stream routes understand the framing of an application protocol that APISIX does not handle natively, so requests can be matched and forwarded by parsed fields. Writing and maintaining that framing logic is your responsibility and sits outside the standard plugin set. Ask for the framing specification and a test corpus before committing a legacy protocol to this path.

redis for command-aware routing

The redis plugin inspects Redis commands on a stream route, which allows routing or policy decisions based on the command and key rather than the connection alone. Inspection requires the gateway to parse the Redis protocol, so clients must reach APISIX without TLS termination happening elsewhere in the path. Test your client library's pipelining and pub/sub behavior through the gateway, since those patterns change how requests are framed.

HTTP plugins do not apply

Authentication, request transformation, rate limiting by header and similar HTTP plugins need HTTP requests to act on, so they have no effect on raw TCP or UDP flows. Access control at layer 4 relies on the stream route match (server address, port, remote address and SNI) and on the network controls around APISIX. Plan authentication for these services in the backend or with network policy, and do not assume an HTTP plugin will protect a database port.

Confirm the plugin list first

Plugin support for stream routes changes between APISIX releases, and the set of payload-inspecting plugins should be checked against the version you intend to run. Build a short checklist per service that records the plugin, the release, the protocol version it handles and the test that proved it works. Treat any plugin not on that list as unavailable until your own tests show otherwise.

TLS termination, mTLS and passthrough trade-offs

The first decision is where TLS ends, because that choice sets what the gateway can see. When APISIX terminates TLS on a stream route, it holds the server certificate and private key, sees the decrypted bytes, and can apply its own logging and policy to them. Re-encrypting to the upstream adds a second TLS session on the backend leg, so the gateway becomes the trust boundary for both connections and must validate the upstream certificate. Requiring mTLS from clients adds a third control: the gateway validates a client certificate against a CA you choose. That identifies callers at the edge, but only if you decide which CA issues client certificates, how revoked certificates are handled, and whether the upstream receives any identity from the client certificate at all. Confirm each of these in writing before the route design is final.

TLS passthrough removes most of that visibility. The gateway reads the server name from the ClientHello, routes on SNI, and forwards the encrypted stream unchanged. It cannot write payload contents to its logs, cannot run payload-inspecting plugins such as mqtt-proxy, xrpc or redis against the traffic, and cannot key rate limits on anything inside the protocol, such as a command, topic or user. What it can still use are connection attributes like the client address, the listening port and the SNI value. Ask the team that owns the protected service which of its controls depend on payload inspection, and accept in the design that those controls move to the backend. The stream proxy documentation describes the matching options, which you should check against your protocol before choosing passthrough.

Certificate handling is the operational cost of each choice. Terminating and re-encrypting routes require the gateway to store private keys, so confirm where APISIX keeps certificate objects in your deployment mode, how those keys are protected at rest, and who can read or change them through the Admin API. Ask the vendor or your own tests whether a rotated certificate applies to new connections without a restart and what happens to connections already open. Passthrough routes keep the private key on the backend, which shrinks the gateway's key exposure but removes its ability to warn you about expiry. Plan certificate expiry monitoring for every listener, including passthrough ports, and agree on a rotation runbook that covers the client CA bundle as well as server certificates.

Security and operational risks of exposing raw ports

Stream routes put databases, brokers and legacy protocols behind a gateway that may not read the payload. The cards below name the controls your team owns for those ports, from the Admin API and etcd to the failover and connection limits you test before go-live.

Database and broker port exposure

A stream route makes a database or broker port reachable wherever the gateway listens, so the listener address and server_addr matching decide who can connect. Confirm that the listener sits on the intended network interface only, that upstream nodes accept connections only from APISIX addresses, and that authentication remains enforced by the database or broker itself, since a layer 4 proxy does not check credentials for you. Treat each exposed port as a new trust boundary.

Admin API and etcd protection

In traditional and decoupled modes, the Admin API on port 9180 can change every route, including stream routes that open new raw ports. Restrict that port to management networks, rotate the admin key, and keep etcd reachable only from gateway and control plane nodes with client certificates. A change to a stream route is a change to your network exposure, so review it with the same care as a firewall rule.

Network segmentation around the gateway

Place the gateway in a zone that can reach the upstream database or broker subnet and nothing else. Define which source networks may reach each stream listener, and make the firewall rules match the route definitions in version control. Ask your network team to confirm that return traffic and health checks follow the same narrow paths, and that no flat network lets clients reach upstreams around the gateway.

UDP session behavior

UDP has no connection setup or teardown, so the gateway tracks sessions by timeout rather than by a closed connection. Test how long idle sessions persist, how many a client can open, and whether replies return to the correct client after an upstream change. Check the timeout and session settings against the protocol you proxy (DNS, syslog, or a game or telemetry feed), and agree on a value with the application owner before production traffic arrives.

Logging gaps for passthrough traffic

With TLS passthrough or a payload-opaque protocol, the gateway sees only addresses, ports and, for SNI routes, the server name. It cannot log queries, topics or request paths. Decide which fields your audit trail needs, such as client address, route name, timestamps and byte counts, and confirm that the access log configuration captures them. Record in your runbook what the gateway cannot show, so investigators know where the missing detail lives.

Failover and connection limit tests

A stream route with several upstream nodes only protects you if failover has been tested under load. Simulate a node failure during active connections, confirm how established sessions are handled, and measure how the gateway behaves when the connection count reaches the limit your database or broker allows. Repeat these tests after every APISIX upgrade, because proxy behavior is part of what you certify, and keep the results as operational evidence.

Implementation sequence for a stream route

This sequence takes a database, broker or legacy TCP service from inventory to a production stream route on APISIX, with a check at each step so the team knows the route behaves before live traffic moves. The order matters because the proxy mode, termination choice and client tests each depend on the step before them.

  1. Inventory ports, protocols and clients

    List every TCP or UDP port the service uses, the protocol on each port, the client libraries and drivers that connect, and whether any client already sends or expects the PROXY protocol. Record which clients use TLS, which certificates they trust and whether they check the server name. Confirm with the application owners and the network team, since missing a secondary port or a hard-coded address is the most common cause of a failed cutover. Done when each port has a named owner, a protocol and a client list signed off by that owner.

  2. Decide termination or passthrough

    Choose whether APISIX terminates TLS on the stream route, using its own certificate and optionally mTLS, or forwards encrypted bytes unchanged by matching on SNI. Termination lets the gateway apply TLS policy and reach the certificate chain, but the upstream connection then needs its own TLS decision. Passthrough keeps end-to-end encryption and leaves the payload invisible to the gateway, so payload-aware plugins cannot run. Write the decision per port and confirm it with the security owner. Done when each port has a documented choice and the certificate owner is named.

  3. Enable stream mode on the gateway

    Set the proxy mode in the APISIX configuration to stream, or to http and stream together if HTTP routes share the same nodes. Stream proxying is off by default, so this change is required before any stream route will load. Apply the change in a non-production environment first and restart or reload the gateway according to your deployment mode. Done when the gateway starts cleanly, the stream listener is bound on the expected ports and existing HTTP routes still respond.

  4. Create stream routes with matching fields

    Define one stream route per service or per distinct match, using the fields the design needs: server port, server address, remote address or SNI. Set the upstream nodes, load balancing and TLS options in the same route. Keep each route narrow so an unexpected client cannot reach another backend, and note which match wins when routes overlap. Done when a single test client connecting to the gateway port reaches the intended upstream and a client on a different port or address does not.

  5. Configure PROXY protocol where the upstream needs it

    If the backend logs or authorizes by client address and expects the PROXY protocol header, enable it for the listening port or globally, and confirm the backend is configured to read it. Sending the header to a service that does not parse it breaks every connection, so the backend and gateway settings must change together. Ask the backend owner to confirm the exact parsing behavior before enabling it. Done when the backend log shows the original client address on a test connection and the service still accepts normal traffic.

  6. Test with the actual client library

    Run the real driver, client or SDK that production uses against the gateway address, not a generic tool alone. Exercise connection setup, authentication, a sustained query or message exchange, a reconnect after the gateway restarts and a failed upstream. Include TLS handshakes with the same certificate chain clients will see. Done when the application completes its normal workload through the gateway with no protocol errors, and the gateway access and error logs show the expected routes matching.

  7. Roll out with a fallback path

    Move a small share of clients or one environment first, while keeping the original direct address available so clients can be pointed back quickly. Watch connection errors, latency and upstream health during the window, and agree in advance which signal triggers a rollback. Keep the previous client configuration in version control until the rollout is accepted. Done when the rollback procedure has been rehearsed once, the owners have signed off the observation window and the direct path is retired only after that sign-off.

Limits to confirm in your environment

Stream proxying in APISIX touches protocol support, matching, certificates and release-specific behavior at once. The items below are the points we expect teams to verify against the current APISIX documentation and their own load and failure tests before they rely on a design.

Plugin support per protocol

Not every APISIX plugin runs on stream routes. Plugins that inspect HTTP requests, such as authentication or header rewriting, do not apply to raw TCP or UDP payloads. Check each plugin you plan to use against the stream proxy documentation, and confirm which payload-inspecting stream plugins exist in your release before you design around them, including mqtt-proxy, xrpc and redis.

UDP behavior under load

UDP has no connection state, so session tracking, idle timeouts and how the gateway handles bursts depend on the workload. Test with your real packet sizes, rates and client counts, and measure dropped datagrams, latency and memory. Do not assume that a design which works for low-volume DNS-style traffic will hold for telemetry or media streams.

Supported matching combinations

Stream routes match on server address, server port, remote address and SNI, but the combinations you need may not all be supported together or behave as expected on one port. Build a matching table for every route, including overlaps, and test each rule, especially where SNI passthrough and TLS termination share a listener.

Certificate handling and rotation

TLS termination, mTLS, TLS to upstreams and passthrough each place certificates in a different part of the path. Confirm how certificates are stored, loaded, reloaded and rotated in your deployment mode, and who owns expiry monitoring for the gateway certificates and the upstream trust chains. Verify client certificate validation behavior with your own CA.

PROXY protocol at the upstream

Sending PROXY protocol headers only helps if the upstream parses them. Confirm whether the upstream expects the header on every connection, and whether it is set globally or per port in your configuration. Test client address logging and access controls on the backend, because a mismatch can silently log the gateway address instead of the client.

Version-specific changes

Stream behavior, plugin availability and configuration keys can change between APISIX releases. Read the release notes for the version you intend to run, and check the current downloads page for the latest release before you pin a version. Repeat your protocol tests on every upgrade, since a release change can affect a route that previously worked.

Questions teams ask before running stream proxying

What drives the cost of a TCP and UDP stream proxy project?

The cost follows the scope you write down: how many protocols and ports you expose, how TLS is handled, whether PROXY protocol is needed, and how deep the testing goes. Each protocol adds its own routing, backend health checks and failure cases, so a single PostgreSQL listener is a much smaller job than a set of database, broker and legacy listeners on one gateway. TLS termination, mTLS and passthrough each change the certificate work and what the gateway can inspect. Testing depth matters too: a load and failover test against your real backends takes more effort than a functional check. Ask the quote to list each protocol, each port, the TLS model per route, the PROXY protocol decision and the test cases, since these are the items that move the price.

How long does stream proxying take to set up?

Duration depends on the same factors as cost, plus the speed at which your teams respond. The work is usually gated by access and decisions rather than by APISIX configuration itself: firewall changes, certificate issuance, confirmation of backend addresses, and agreement on health checks and timeouts. Each protocol that needs a separate test pass extends the schedule, and so does any change to how clients reach the gateway, such as DNS or load balancer updates. Ask for a timeline that separates the client-side tasks from the build tasks and shows which ones block others, so you can see where a delay would land.

What does our team need to provide for the project?

Four groups of input are needed before build work starts:

  • Network access: firewall rules from client networks to the APISIX nodes and from the nodes to each backend port, plus the load balancer or DNS changes that send traffic to the gateway.
  • Certificates: server certificates and keys for any termination route, the CA chain for mTLS, and the trust bundle for TLS to upstreams. Confirm who issues and rotates them.
  • Upstream owners: a named contact for each database, broker or legacy system who can confirm addresses, ports, protocol versions and maintenance windows.
  • Test environments: a non-production copy of each backend and a client that reproduces real traffic, so routes can be verified before cutover.

Missing any of these usually shows up as a delay in the first week, not as a technical problem.

Can our internal team build stream proxying without a partner?

Yes, a team with Linux, networking and TLS experience can enable stream mode and build stream routes from the APISIX documentation. The harder parts are usually outside the configuration: deciding how many protocols share one gateway, choosing where TLS ends, testing failover for long-lived database and broker connections, and writing the runbook for on-call staff. If your team has no one who has run a layer 4 proxy in production, an outside review of the design and test plan often costs less than an outage found after go-live. Confirm with your own engineers which of these skills they hold before deciding.

Which plugins work for TCP and UDP traffic?

Stream routes support a smaller set of plugins than HTTP routes, because layer 4 traffic has no HTTP headers or paths to act on. The stream proxy documentation names mqtt-proxy, xrpc and redis as payload-inspecting stream plugins, and these only work for their specific protocols. Many HTTP plugins, such as those for header rewriting, JWT validation or request body handling, do not apply to a raw TCP stream. Check each plugin you plan to use against the current stream proxy documentation before you design authentication or rate limits for a database or broker port, since the answer determines where those controls must live.

How is the scope of a fixed-price stream proxy engagement agreed?

Most DeployOpen engagements are fixed-scope, and the scope, deliverables and timeline are agreed in writing before work starts. For a stream proxy project, the written scope normally lists the protocols and ports, the TLS model for each route, whether PROXY protocol is included, the environments covered, the test cases and the handover materials. Changes after signing, such as adding a new broker or moving a route to passthrough, are handled as a written change to that scope. Ask for the written scope to name every assumption about client access and certificates, so that a missing input is visible as a documented dependency rather than a hidden cost.

What does ongoing support for stream routes involve?

After go-live, stream routes need monitoring of connection counts and backend health, certificate renewal, APISIX version upgrades and periodic failover tests. These tasks recur for as long as the proxy runs, so they belong in the cost model alongside the one-time build. DeployOpen offers ongoing support, upgrades and continuous testing as retainers, and the scope of any retainer is agreed in writing. Ask whether a support quote covers upgrade testing against each stream backend, since a change in the gateway can affect long-lived connections that only a realistic test will expose.

How DeployOpen scopes and delivers stream proxying with APISIX

DeployOpen plans, implements, hardens and documents self-hosted Apache APISIX inside your own infrastructure, whether that is your cloud accounts, data centers or an isolated network. For a layer 4 project, the written scope usually names each stream listener, the upstream services behind it (databases, brokers or legacy systems), the port and SNI matching rules, where TLS is terminated or passed through, whether the PROXY protocol is needed, and which payload-inspecting plugins, if any, are in use. Most engagements are fixed-scope, so these items, the deliverables and the timeline are agreed in writing before build work starts. Ask for the scope to list the apisix.proxy_mode setting, the stream route inventory and the verification steps as named deliverables, so that acceptance is measurable.

Delivery covers the work that stream proxying tends to leave unfinished: enabling stream mode on the right data plane, building and testing stream routes against each upstream, setting up certificates and mTLS where required, and confirming that health checks, logging and access controls behave as the security team expects. The hardening pass covers the Admin API exposure, the etcd or standalone configuration source and the network rules around each listener. Documentation covers the route definitions as code, the runbook for adding a new port, and the rollback steps. Confirm with us which parts of this are included in your fixed scope and which are optional add-ons.

Once the system is live, ongoing support, upgrades and continuous testing are available as retainers. A retainer is useful for stream proxying because new listeners, certificate renewals and APISIX version changes tend to arrive after the project closes. Ask for the retainer terms in writing, including what is covered for upgrades, who responds to incidents on stream listeners and how changes to listeners are tested before they reach production. DeployOpen does not publish a price list; a quote follows from the written scope, and we do not issue audit reports or certifications, so any compliance evidence from this work is prepared for your independent assessor.

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.