Airgap Deployment
This page describes how to deploy and run Datasance PoT in air-gapped or restricted networks where remote Control Plane hosts or Edgelet node hosts cannot access the internet (or container registries) directly.
Overview
potctl allows users to deploy container images to edge nodes that cannot access the internet for pulling images. Set spec.airgap: true on Control Plane or Agent (Edgelet node) YAML. potctl pulls images on your workstation, transfers them over SSH, and loads them on the remote host.
For airgap installations potctl assumes that your remote hosts already have a container engine.
Remote ControlPlane
---
apiVersion: datasance.com/v3
kind: ControlPlane
metadata:
name: remote
spec:
airgap: true
iofogUser:
name: Foo
surname: Bar
controller:
publicUrl: https://controller.example.com:51121
consoleUrl: https://console.example.com:8008
package:
image: ghcr.io/datasance/controller:v3.8.0
auth:
mode: embedded
bootstrap:
username: admin
password: "LocalTest12!"
systemMicroservices:
router:
amd64: ghcr.io/datasance/router:3.8.0
arm64: ghcr.io/datasance/router:3.8.0
riscv64: ghcr.io/datasance/router:3.8.0
arm: ghcr.io/datasance/router:3.8.0
nats:
amd64: ghcr.io/datasance/nats:2.14.3
arm64: ghcr.io/datasance/nats:2.14.3
riscv64: ghcr.io/datasance/nats:2.14.3
arm: ghcr.io/datasance/nats:2.14.3
nats:
enabled: true
controllers:
- name: remote-1
host: 10.0.23.66
ssh:
user: admin
keyFile: ~/.ssh/id_rsa
systemAgent:
package:
container:
image: ghcr.io/datasance/edgelet:1.0.0
config:
deploymentType: container
containerEngine: docker
arch: amd64
host: 192.168.139.148
Set spec.airgap: true. potctl downloads Controller, Edgelet, Router, NATS, and debugger images and sends them to the remote host over SSH.
Set controllers[].systemAgent.config.arch and controllers[].systemAgent.config.containerEngine so potctl knows which Edgelet image to pull and transfer. List all four arch keys under systemMicroservices when your fleet mixes CPU types.
Default airgap installation scripts:
Download and customize these scripts if potctl should use your own install flow.
Remote Edgelet nodes
---
apiVersion: datasance.com/v3
kind: Agent
metadata:
name: foo
spec:
host: 192.168.139.148
ssh:
user: foo
keyFile: ~/.ssh/id_rsa
port: 22
airgap: true
package:
container:
image: ghcr.io/datasance/edgelet:1.0.0
config:
deploymentType: container
containerEngine: docker
arch: arm64
Set spec.airgap: true on the Agent kind (Edgelet node). potctl downloads Edgelet, Router, NATS, and debugger images and sends them to the remote host over SSH.
Set spec.config.arch and spec.config.containerEngine so potctl knows which Edgelet image to pull and transfer.
OfflineImage for microservices
OfflineImage is the main mechanism for getting container images onto Edgelet nodes that cannot pull from the internet. v3.8.0 uses multi-arch keys (amd64, arm64, riscv64, arm) instead of legacy x86 / arm fields.
- On a machine that has registry access (and
potctl), define an OfflineImage YAML with image tags per architecture and the list of Edgelet node names. - Run
potctl deploy -f offline-image.yaml.potctlpulls the images locally, transfers them to each Edgelet node via SSH, and loads them into the container runtime. Catalog items are created with registryfrom_cacheso applications can reference these images. - Use flags such as
--no-cacheand--transfer-poolas needed (see OfflineImage reference).
Example multi-arch bundle:
---
apiVersion: datasance.com/v3
kind: OfflineImage
metadata:
name: my-app-offline
spec:
amd64: ghcr.io/datasance/my-app:1.0
arm64: ghcr.io/datasance/my-app:1.0
agent:
- edge-1
- edge-2
This flow avoids any need for the Edgelet node to reach a registry. All image data is pushed from the machine running potctl to the nodes over SSH.
For OfflineImage YAML and CLI flags, see OfflineImage YAML Specification. For the full deployment path, see Platform Deployment Introduction.