Air-Gap Deployment Guide
This guide explains how to deploy Guardimesh in air-gapped (disconnected) Kubernetes clusters where nodes have no access to the public internet. This deployment model is available on the Enterprise tier.
Overview
Air-gapped deployments are common in:
- Government and defense installations
- Regulated industries (finance, healthcare)
- Isolated production environments with strict network policies
- Environments behind strict egress firewalls
Guardimesh supports fully disconnected operation through:
- Enterprise Operator — Deploys the full platform stack in-cluster using the
GuardimeshPlatformcustom resource - Internal Signature Server — Serves ClamAV databases from a local PVC (no internet required)
- Local PostgreSQL — Replaces BigQuery for scan result storage
- Self-contained Web Console — UI and API run locally within the cluster
Architecture
┌─────────────────────────────────────────────────────────────┐
│ Air-Gapped Kubernetes Cluster │
│ │
│ ┌────────────────────┐ ┌──────────────────────┐ │
│ │ Signature Server │ │ PostgreSQL │ │
│ │ (Deployment + PVC) │ │ (StatefulSet + PVC) │ │
│ │ │ │ │ │
│ │ Serves ClamAV │ │ Scan results │ │
│ │ signatures via HTTP │ │ User data │ │
│ └────────────────────┘ └──────────────────────┘ │
│ ↓ ↑ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Scanner DaemonSet (one pod per node) │ │
│ │ │ │
│ │ init-puller → antivirus, scanner, inspector, │ │
│ │ puller (updates every 12h) │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ backend-api (Scan Data Ingestion) │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ web-console (UI + Session API) │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑
Admin access via kubectl / Ingress
Prerequisites
Container Images
Pre-load all required images into your private registry:
| Image | Purpose |
|---|---|
quay.io/guardimesh/guardimesh-operator-enterprise:latest | Enterprise operator |
quay.io/guardimesh/web-console:latest | Web console backend + UI |
quay.io/guardimesh/backend-api:latest | Scan data ingest API |
quay.io/guardimesh/storage-access-airgap:latest | Internal signature server |
quay.io/guardimesh/guardimesh-scanner:latest | Scanner |
quay.io/guardimesh/guardimesh-antivirus:latest | ClamAV daemon |
quay.io/guardimesh/guardimesh-inspector:latest | System info collector |
quay.io/guardimesh/guardimesh-puller:latest | Signature puller |
postgres:15-alpine | PostgreSQL database |
Transfer images using your preferred air-gap method (e.g., skopeo copy, docker save/load, or image mirroring tools).
ClamAV Signature Files
Download signature files from an internet-connected machine:
mkdir -p ./clamav-signatures && cd ./clamav-signatures
# Official ClamAV signatures
wget http://database.clamav.net/main.cvd
wget http://database.clamav.net/daily.cvd
wget http://database.clamav.net/bytecode.cvd
# Third-party signatures (optional, recommended)
wget https://sanesecurity.com/signatures/sanesecurity_signature_db.ldb.gz
gunzip sanesecurity_signature_db.ldb.gz
cd ..
tar czf clamav-signatures.tar.gz clamav-signatures/
Transfer the tarball to your air-gapped environment.
Cluster Requirements
- Kubernetes 1.24+ or OpenShift 4.10+
- Storage provisioner (local-path, hostpath, or enterprise storage)
- At least 100 Gi available storage
- Cluster networking configured (CNI plugin installed)
kubectlaccess with cluster-admin permissions