Skip to main content
Version: v3.8.0

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.

warning

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.

  1. 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.
  2. Run potctl deploy -f offline-image.yaml. potctl pulls the images locally, transfers them to each Edgelet node via SSH, and loads them into the container runtime. Catalog items are created with registry from_cache so applications can reference these images.
  3. Use flags such as --no-cache and --transfer-pool as 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.

Group 3See anything wrong with the document? Help us improve it!