DEV Community

Cover image for How to deploy an AI assistant: Pattern 3, the isolated site (on-premises and air-gapped)
Rajesh Yadav
Rajesh Yadav

Posted on Edited on

How to deploy an AI assistant: Pattern 3, the isolated site (on-premises and air-gapped)

A reference architecture for running the whole AI assistant platform, models included, inside the customer's own facility


This document describes the third of three deployment patterns for an AI assistant platform. It is written for architects and platform engineers whose customer, or whose own organisation, has said: "No prompt leaves this building. Not to a vendor, not to a cloud model provider, not to anyone. Our network has no route to the internet."

Defence, sovereign functions, regulated manufacturing, some banks and hospitals. Fewer organisations need this than the first two patterns, but the ones who ask for it will check.

The structure is the same as Patterns 1 and 2. The design is independent of any product; the technologies named can be replaced.

Terms used throughout. The provider is whoever builds and signs the platform software: a vendor, or an internal platform team. The customer is the organisation whose facility the platform runs in. In this pattern the customer operates everything.

Prerequisites. A facility with its own network, GPU servers sized for peak inference, a Kubernetes distribution that can be installed offline, an internal certificate authority and time source, an approved process for carrying media in and out, and a team that can run Kubernetes, databases, Vault and GPUs without vendor access. A second data center if site-level recovery is required.


The three patterns at a glance

Pattern Data lives in Operated by Crosses the boundary
1. Shared service the provider's account, inside a residency boundary the provider every user's traffic, inside the boundary
2. Control/data split the customer's cloud account the customer runs the data plane; the provider runs a control plane signed software in, optional health metadata out
3. Isolated site (this document) the customer's building the customer, everything two signed files in, one optional file out

For this pattern the three questions have short answers. The data lives in the building. The customer operates everything. Nothing crosses on an ordinary day. The rest of this document is what it takes to make those sentences true, and what it costs.


Architecture

Figure 1. The isolated site. One boundary around the customer's facility with a primary and a DR data center. Users, entry path, identity, the cluster, tools and actions, data and keys, the model router with local model servers, and all delivery, observability and licensing components run inside. Below the boundary, the air-gap band lists the only things that ever cross.

Four things to notice. There is no provider column. The provider builds, signs and prepares bundles and licences, and runs nothing in or near the customer. The models are local. A model router in front of vLLM or Triton on the customer's own GPUs replaces every cloud model call. The air gap is drawn as a band, not a line. The bottom of the diagram is the complete list of what ever crosses, with direction and condition. The ◆ marker appears nowhere, because there is no arrow to put it on.

A connected on-premises variant uses the same stack with one difference: bundles are pulled over a single approved outbound HTTPS channel instead of physical media.

Request flow

Hop Path Protocol Who opens it Authentication
① Global traffic manager → load balancer HTTPS/443; internal DNS steers to the active site client opaque session cookie or token, resolved at the gateway
② Load balancer → OpenShift Router HTTPS/443 load balancer n/a (network hop)
③ Router → API gateway HTTPS/443 router n/a (network hop)
④ Gateway → identity broker HTTPS/443 gateway login and signing keys only; not on the chat path
⑤ Gateway → Chat Gateway HTTP/8080 over mTLS gateway mesh identity
⑥ Chat Gateway → Orchestrator gRPC over mTLS Chat Gateway mesh identity
⑦ Orchestrator → tools and actions gRPC / HTTPS over mTLS Orchestrator mTLS; the sandbox holds no credentials; per-user tokens from the vault
⑧ Orchestrator → retrieval → pgvector gRPC; then Postgres/5432 Orchestrator, then retrieval mTLS; database role from Vault; embeddings from a local model
⑨ Orchestrator → model router → local model servers gRPC / HTTP over mTLS, inside the cluster Orchestrator mesh identity; admission control per user
⑩ Orchestrator → connector hub → internal systems gRPC; then HTTPS Orchestrator, then connector mTLS; connector credentials from Vault
⑪ Streamed answer → Chat Gateway → user SSE over HTTPS already open same session as ①

The table is almost identical to Pattern 2's. The application does not change between patterns; the ground it stands on does.

Components

Component Role Common choice
Global traffic manager, load balancers, router Internal entry path; steers users to the active site F5 GTM, NGINX, OpenShift Router
Internal CA Certificates for every service, renewed locally cert-manager with an internal CA
API gateway, identity broker, directory Opaque session resolution; IdP token verified once at login Kong, Keycloak, Active Directory or LDAP
Cluster: Chat Gateway, Orchestrator, retrieval, connector hub, Redis, mesh The application, single-customer, mTLS between every service OpenShift, Istio or Linkerd
Tools and actions Sandbox with no egress, action gateway, MCP connectors to internal tools, per-user credential vault, internal webhooks, metering gVisor or Firecracker, MCP servers
Model router, model servers, embedding model Several local models behind one interface; request queue and admission control vLLM, Triton
GPU nodes Inference capacity, N+1 customer-owned
Data Postgres with pgvector, object storage, offline immutable backups CloudNativePG, MinIO, Velero
Secrets and keys Vault with HSM auto-unseal; local key management Vault, HSM
Delivery Scan station, checksum and signature verification with an offline trust root, local registry, GitOps, admission verification cosign, Harbor, Argo CD, Kyverno
Observability and audit All local; SIEM export; self-diagnostics Fluent Bit, OpenTelemetry, Loki, Jaeger, VictoriaMetrics, Grafana
Licensing and time Signed licence file verified locally; internal NTP custom, NTP
DR data center Warm standby: load balancer, minimum-scale cluster, GPU nodes, replicas same stack

Use cases

A facility with no route to the internet

Defence and sovereign environments, where the network is physically isolated and every transfer in or out is a controlled event on approved media. The pattern as drawn.

A regulated site that permits one outbound channel

Manufacturing, utilities, some financial institutions. The connected variant: the same stack, with software bundles pulled over one approved outbound HTTPS channel and nothing else leaving. Everything on the diagram stays as drawn except the physical media.

An organisation that cannot accept any cloud model provider

Even under their own contract and in their own region, some organisations cannot send prompts to a cloud model provider. Pattern 2 does not help them; this pattern does, at the cost of a local model class and local GPUs.


Design considerations

Security and privacy

Delivery across an air gap. The software pull of Pattern 2 is replaced by a bundle: images, the Helm chart, model weights and an SBOM, signed, written to approved physical media, and carried in through the customer's channel. Inside, it passes a customer-run scan and quarantine station, then checksum and signature verification against an offline trust root that shipped with the first installation. There is no call to a transparency log because there is nothing to call. The trust root is rotated through the same channel, with the old key signing the new one. From the local registry onward, the cluster behaves exactly as in Pattern 2: Argo CD pulls, Kyverno verifies before any pod starts, nothing is hand-applied.

Identity inside the building. The identity broker and the directory both sit inside the facility. The IdP token is verified once at login; the browser then holds an opaque session stored as a hash. CLI tokens and API keys resolve the same way. Certificates come from the internal CA and expiry is monitored, because there is no public CA to fall back on.

Tools and actions with nowhere to go. The sandbox has default-deny egress and takes packages only from the local registry mirror; there is no package index to reach, and this constraint belongs in the product documentation. Tool connectors run against internal tool servers only. The action gateway applies policy and approval steps for irreversible actions. Per-user tokens are sealed in a credential vault. Inbound webhooks come only from internal systems, through the same entry path, with signatures verified. Metering writes to a local store with per-department limits.

Models on the customer's GPUs. A model router fronts several local model servers behind one interface, with a request queue and admission control per user. A local embedding model serves retrieval on the same GPU pool. Nothing calls out. Model updates arrive as weights in the bundle, verified like everything else.

Data, keys and Vault. Authorization is one decision point: policy compiled into every query, row-level security beneath. Keys live in a local HSM or software KMS. Backups are offline and immutable, on separate media, because replication copies corruption and ransomware faithfully. Vault unseal uses HSM auto-unseal where possible; with Shamir shares, Vault stays sealed after a power loss until three of five key holders are present, which puts people in the recovery path.

Reliability

A DR data center runs as a warm standby: a load balancer with a standby VIP, a minimum-scale cluster, GPU nodes for degraded-capacity inference, and replicas of object storage, Postgres, Vault and the registry. Failover is the customer's runbook with human approval; the global traffic manager steers users to the surviving site.

Design targets, to be validated in the customer's own failover testing: recovery time about one hour; recovery point of seconds to minutes for Postgres and minutes for object storage; reduced GPU capacity until the primary site is restored. A customer with one data center gets local high availability and offline backups, and no site-level DR.

GPU capacity is the hard ceiling. There is no cloud to burst into. Size for peak, queue beyond it, and build N+1 so one failing node does not stop inference.

Operations

Everything is local: Fluent Bit, OpenTelemetry, Loki, Jaeger, VictoriaMetrics, a local Grafana, feeding the customer's SIEM together with cluster and infrastructure audit logs. Nothing is collected centrally by the provider, ever. There is no heartbeat because there is no line for it.

Support has to be designed for this: built-in self-diagnostics with a one-click health report, a redacted support bundle the customer reads before it leaves and sends only if they choose to, and an on-site provider engineer or supervised session only if the customer allows. Remote sessions exist only in the connected variant.

Patch latency is the operating cost that most needs saying early. Security fixes arrive at the bundle cadence, monthly as standard with emergency bundles for critical CVEs, and each needs a physical transfer, a scan and a verification.

A signed licence file is verified locally with no network check; expiry leads to a grace period and in-app warnings, never a silent stop. Licence and certificate checks depend on a correct internal NTP source, so clock drift is monitored as a first-class alert.

Cost

The customer pays for everything: GPUs, servers, storage, a second site, and the people to run them. Nothing is managed. This is the heaviest operating burden of the three patterns by a wide margin, and the only one with capital hardware cost.

Performance

Performance is bounded by local GPU capacity and model class. Only models that can be delivered as weights and served on this hardware are available; frontier hosted models are out of scope by definition. The request queue and admission control make the ceiling visible to users instead of letting requests fail.


Design alternatives

  • The connected on-premises variant. One approved outbound HTTPS channel for bundles. Removes physical media and shortens patch latency, at the cost of one line out of the facility.
  • Shamir unseal instead of an HSM. Cheaper, but puts people in the recovery path.
  • One data center. Removes the second site's cost and gives up site-level DR; local HA and offline backups remain.
  • Pattern 2 with a private model endpoint. For an organisation that can accept a cloud model provider under its own contract, Pattern 2 is lighter and offers more model choice.

What crosses the air gap

Crossing Direction What travels Who carries it Can the customer refuse it?
Offline bundle provider → customer, physical media signed images, Helm chart, model weights, SBOM the customer's approved channel; scanned and verified before the registry yes; the running version keeps working
Licence renewal file provider → customer, same channel signed file: new expiry and entitlements same as above yes; expiry means a grace period and warnings, never a silent stop
Support bundle (optional) customer → provider, manual redacted diagnostics the customer read first the customer yes; never required; the alternative is an engineer on site

That is the whole table. No heartbeat, no software pull, no model call, no sign-in assertion.


Trade-offs

  • The customer runs everything, including GPUs and a second site.
  • Model class is fixed by hardware: local open-weight models only.
  • Patch latency at the bundle cadence.
  • Support works blind: bundles the customer chooses to send, or a visit.
  • People in the recovery path unless an HSM is used for unseal.
  • No provider commitments on recovery. Every figure is the customer's to validate.

When to choose this pattern

Choose the isolated site when the rule is "no prompt leaves this building, and there is no route out", when the organisation can operate Kubernetes, GPUs, databases and a second site, and when a local model class meets the need. If a cloud model provider under their own contract is acceptable, Pattern 2 is lighter. If they want the provider to run it, Pattern 1.

Deployment outline

Everything arrives as a bundle and is installed by the customer.

  1. First bundle. Images, Helm chart, model weights, SBOM, the offline trust root and the signed licence, on approved media. Scan, verify the checksum and signatures, load into the local registry.
  2. Foundation. The Kubernetes cluster, GPU nodes, Postgres with pgvector, object storage, Vault with HSM auto-unseal, the internal certificate authority and time source.
  3. Delivery path. Argo CD pointed at the local registry, Kyverno with the offline trust root, the scan and quarantine station as a standing procedure.
  4. Identity and entry path. The identity broker federated to the internal directory, the global traffic manager, load balancers, router and API gateway with internal certificates.
  5. Application, tools and models. Argo CD applies the signed charts: Chat Gateway, Orchestrator, retrieval, connectors, mesh, the tools-and-actions layer, the model router and model servers with the delivered weights.
  6. Observability, licensing, support. Local telemetry into the SIEM, the licence file loaded and verified, self-diagnostics and the support-bundle procedure agreed with the customer.
  7. Second site and backups. The DR data center with replicas and a minimum-scale cluster, offline immutable backups, then a failover test that replaces the design targets with measured results.

Detailed topology

The full design in twelve bands. The hop numbers match the request flow table above. Open the figure at full size to read the component notes.

Figure 2. The full isolated-site topology: users, ingress, identity, the OpenShift cluster, local tools and actions, a local model router, local data, secrets, a local-only supply chain, local observability and support, licensing and time, and the air-gap band. A DR data center runs as a warm standby on the right.

Choosing between the three patterns

Pattern 1: shared service Pattern 2: control/data split Pattern 3: isolated site
Where the data lives provider's account, inside a residency boundary customer's cloud account customer's building
Who operates provider customer (data plane), provider (control plane) customer, everything
Model provider's model accounts, pinned to the region customer's own cloud model providers local models on the customer's GPUs
Software delivery provider deploys customer pulls signed software signed bundle on physical media
Support provider sees its own system redacted bundle, or break-glass on the customer's terms redacted bundle or on-site visit
Operating burden on the customer low heavy heaviest
What crosses the boundary every user's traffic, inside the boundary software pull, opt-in heartbeat, support; model call to the customer's own provider two signed files in, one optional file out

Three patterns, one application, the same three questions. If you can answer them for your own system, with every crossing drawn and every figure labelled for what it is, you can answer the questions a security review will ask.

What's next

This is part 3 of a three-part series. The other parts are also linked in the series box at the top of this article.

Top comments (0)