Skip to content

Engineering / Technical guide

How to verify a zero-egress AI environment

Build an acceptance test that exercises real work, attempts prohibited connections, and records exactly what was verified.

Falcon Software Group3 min readReference guide

“No outbound traffic was observed” and “outbound traffic is prevented” are different findings. An idle server might have no reason to make a connection. A verification plan needs useful-work tests, deliberate connectivity tests, and a review of the enforcement configuration.

This guide provides a test method, not a certification. The outcome applies to the identified environment, configuration, and test window.

Establish the scope and observation points

Inventory the model server, application, retrieval pipeline, identities, sidecars, background tasks, and platform components. Record where the claimed boundary is enforced and where traffic can be observed.

Include IPv4 and IPv6 where enabled, DNS behavior, proxies, and host-level routes. A packet capture at one interface can miss another path. Flow logs and application logs serve different purposes and need to be interpreted within their coverage.

Agree safe synthetic test data and controlled test destinations. The test should not transmit real customer material.

Review policy semantics

For Kubernetes, this is an illustrative egress-isolation baseline for pods in a dedicated test namespace:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: isolate-test-egress
  namespace: ai-isolation-test
spec:
  podSelector: {}
  policyTypes:
    - Egress

It requires a network plugin that enforces NetworkPolicy. Other matching policies can add allowed traffic; this object does not override them. It does not define ingress controls or isolate the host. DNS is blocked unless separately permitted. Review the Kubernetes NetworkPolicy documentation before adapting it.

This snippet is a starting point for a controlled test environment. Required internal service paths need narrow rules. Review the combined policy set and the host/network perimeter rather than assuming a single manifest proves isolation.

Exercise the useful workload

Run representative requests after a fresh application start. Include document ingestion, OCR if used, embedding generation, retrieval, inference, identity checks, logging, and error handling.

Then restart the serving process with only approved local artifacts available. Do not rely on a developer machine’s warm cache. Remove an optional dependency in the test environment and confirm the system reports a bounded failure instead of attempting a public fallback.

Offline settings can reduce unnecessary requests. Hugging Face documents that HF_HUB_OFFLINE prevents Hub HTTP calls in the library and requires cached files. That setting does not constrain unrelated libraries or replace network enforcement.

Attempt prohibited paths deliberately

Use a controlled diagnostic workload with the same effective network policy as the application. Confirm an internal permitted connection works; then attempt the prohibited destinations and protocols in the plan.

A failed lookup alone does not prove a direct-IP connection is blocked. Test DNS and direct connectivity independently. If an outbound proxy exists, inspect its authorization and destination rules. Check that a test pod actually inherited the same selectors and runtime conditions as the application.

Record the expected enforcement reason. A timeout caused by a dead destination is not evidence that your firewall denied the connection.

Use an acceptance matrix

ScenarioExpected observation
Approved internal requestCompletes with expected output
Cold startup with staged assetsReady without external retrieval
Missing required model artifactExplicit failure, no public fallback
Prohibited direct connectionDenied by the intended control
External DNS queryBehavior matches the declared DNS policy
Document ingestion and evaluationNo unapproved processor receives content
Runtime restart and error pathBoundary remains enforced

Adapt the matrix to the environment. Keep results for permitted paths as well as denied ones so a broken application is not mistaken for a successful isolation test.

Preserve a bounded evidence package

Record the release identifier, model and software inventory, deployed policy, runtime identities, timestamps, test inputs, observations, and gaps in visibility. Distinguish inspected configuration from observed behavior.

Repeat affected tests after changes to networking, dependencies, identity, tools, or support procedures. A zero-egress implementation engagement can turn this method into an acceptance plan for your specific environment.

Keep exploring

Related guides

Start a conversation

Need help with the implementation?

Bring your use case and constraints. We can discuss how this design would apply to your environment.