Skip to main content

Air-Gap Bundle Delivery

Petra's air-gap delivery is built around bundles -- single, signed, self-contained archives that include everything needed to deploy or update a cluster without internet access.

Creating a Bundle​

Define what goes into the bundle:

apiVersion: petra.sh/v1alpha1
kind: Bundle
metadata:
name: petra-platform
version: 0.1.0
spec:
images:
- name: cilium-agent
image: cgr.dev/shebash.io/cilium-agent
- name: gatekeeper
image: cgr.dev/shebash.io/gatekeeper
# ... all required images
charts:
- name: cilium
repo: https://helm.cilium.io
version: 1.16.5
# ... all required charts
platform:
includeBase: true
includeObservability: true
output:
dir: ./dist
sign: true
verify: true
petra bundle create -f bundle.yaml

Build Process​

  1. Image Pull: Each image pulled from Chainguard with digest pinning (via crane)
  2. Signature Verification: Cosign verifies each image against Chainguard's CA
  3. Vulnerability Scanning: Each image scanned for known CVEs
  4. Chart Pull: Helm charts pulled at exact pinned versions
  5. Manifest Inclusion: Platform Kustomization files and HelmRelease definitions
  6. Metadata Generation: metadata.json with digests, signatures, scan results
  7. Packaging: Compressed into .tar.zst archive
  8. Signing: cosign sign-blob produces detached .sig file

Output:

dist/
petra-platform-0.1.0.tar.zst # The bundle
petra-platform-0.1.0.tar.zst.sig # Cosign signature

Cross-Domain Transfer​

Bundles traverse any CDS type:

MethodHowAutomation
SneakernetRemovable media through physical checkpointManual
Hardware DiodeOne-way fiber link (Owl, Waterfall)Partial
GuardBidirectional with content inspection (Forcepoint, BAE)Partial
AWS DiodeS3-to-S3 through managed CDSFull

AWS Diode Pipeline​

Connected Side Classified Side
petra bundle create
-> S3 staging bucket
-> AWS Diode transfer -------> S3 landing bucket
-> verify signature
-> petra bundle load
-> Flux reconciles

Bundle Load (Disconnected Side)​

petra bundle load -f petra-platform-0.1.0.tar.zst
  1. Verify cosign signature (reject on failure)
  2. Extract archive
  3. Load images into container runtime (pre-pulled or k3s airgap tar)
  4. Place charts in local repository
  5. Flux detects updated manifests and reconciles
  6. Report status of each HelmRelease

CDS Compatibility​

Bundle format is designed for content inspection:

  • tar.gz available for maximum guard compatibility
  • Manifests in plain text at top level for inspection
  • OCI image layers are standard tar archives
  • No executable binaries outside OCI layers
  • Chunking support for per-file size limits