Air-gapped installation¶
The cluster runs with no internet access. Every container image and model weight it needs is served from the internal registry inside the cluster.
The provisioning machine has internet access. It reaches the origin registries and Hugging Face, and pushes what it fetches into the internal registry.
How it works¶
- The installer image is transferred to the provisioning machine. It carries the Pulumi deployments, charts, CRDs and the image list.
- The installer deploys Harbor into the cluster, preloading its bootstrap images onto the Harbor node over SSH.
- The installer pulls service and application images from their origin registries, and model weights from Hugging Face, then pushes both into the internal registry.
- Cluster nodes pull exclusively from that registry.
Requirements¶
| Item | Detail |
|---|---|
| Provisioning machine | Reachable: origin registries and Hugging Face |
| Model manifest | models.yaml listing the models to publish |
| Registry trust | Nodes must trust the internal registry's CA |
| Storage | Capacity for all images and model weights |
| Credentials | HF_TOKEN, plus registry tokens for any private images |
Registry trust¶
Nodes must trust the internal registry before they can pull. Untrusted nodes fail with
ImagePullBackOff or x509 errors. See
Node registry trust.
Verifying isolation¶
kubectl get pods -A -o jsonpath='{range .items[*]}{.spec.containers[*].image}{"\n"}{end}' \
| sort -u
Every image should reference the internal registry. Any docker.io, ghcr.io or
quay.io reference will fail on a disconnected cluster.