ignition-scaleout

A Helm chart for failover Ignition Gateway with scalable frontend client functionality. This chart deploys separate backend (controller) and frontend (agent) sets of Ignition Gateways to support high-scale architectures.

Initialization Process

The following diagram illustrates how the chart initializes the distributed architecture, establishing trust and connectivity between the Frontend and Backend layers.

Note: The Backend StatefulSet includes two headless services (-backend-primary and -backend-backup) targeting specific nodes for direct diagnostics.

sequenceDiagram
    participant K8s as Kubernetes
    participant Certs as Cert Manager
    participant Backend as Backend (Controller)
    participant Frontend as Frontend (Agent)
    
    par Backend Initialization
        K8s->>Backend: Start Pod
        Backend->>Certs: Request GAN Certs
        Certs-->>Backend: Mount Secrets (TLS/CA)
        Backend->>Backend: Initialize as Controller
    and Frontend Initialization
        K8s->>Frontend: Start Pod
        Frontend->>Certs: Request GAN Certs
        Certs-->>Frontend: Mount Secrets (TLS/CA)
        Frontend->>Frontend: Initialize as Agent
    end
    
    Frontend->>Backend: Open GAN Connection (Mutual TLS)
    Backend-->>Frontend: Accept Connection
    Frontend->>Frontend: Mount Proxy Tags & Projects

Configuration

The following sections list the configurable parameters of the ignition-scaleout chart.

General Settings

Global settings applicable to the entire chart.

ParameterTypeDefault
applicationNamestring"ignition-scaleout"
image.repositorystring"inductiveautomation/ignition"
image.tagstring"8.3"
image.pullPolicystring"IfNotPresent"
affinity.enabledboolfalse
affinity.topologyKeystring"kubernetes.io/hostname"
certManager.issuer.namestring"cluster-issuer"
certManager.issuer.kindstring"ClusterIssuer"
serviceAccount.createboolfalse
serviceAccount.namestring""
serviceAccount.annotationsobject{}

Backend Configuration

The Backend acts as the controller and primary data processor.

Ignition Settings (Backend)

ParameterTypeDefault
backend.configobject(See below)
backend.argslist(See below)
backend.logging.levelstring"INFO"
backend.eam.rolestring"Controller"
backend.tls.keystorePasswordstring"ignition"
backend.gan.keystorePasswordstring"metro"

Default backend.config:

ACCEPT_IGNITION_EULA: "Y"
DISABLE_QUICKSTART: "true"
GATEWAY_ADMIN_USERNAME: "admin"
GATEWAY_MODULES_ENABLED: "alarm-notification,modbus-driver-v2,opc-ua,reporting,siemens-drivers,sql-bridge,tag-historian,udp-tcp-drivers"
GATEWAY_NETWORK_REQUIRETWOWAYAUTH: "true"
GATEWAY_NETWORK_SECURITYPOLICY: "Unrestricted"
IGNITION_EDITION: "standard"

Default backend.args:

- "-m"
- "1024"
- "-n"
- "$(GATEWAY_SYSTEM_NAME)"
- "--"
- "gateway.useProxyForwardedHeader=true"

Web Server SSL/TLS (Backend)

ParameterTypeDefault
backend.ssl.enabledboolfalse
`backend.ssl.secretName”string""

Security & Monitoring (Backend)

ParameterTypeDefault
backend.networkPolicy.enabledboolfalse
backend.serviceMonitor.enabledboolfalse
backend.serviceMonitor.intervalstring"30s"

Redundancy (Backend)

ParameterTypeDefault
backend.redundancy.enabledboolfalse
backend.redundancyobject(See below)

Default backend.redundancy:

backupFailoverTimeout: 10000
enableSsl: true
enabled: true
httpConnectTimeout: 10000
httpReadTimeout: 60000
joinWaitTime: 30000
masterRecoveryMode: "Automatic"
maxDiskMb: 100
pingMaxMissed: 10
pingRate: 1000
pingTimeout: 300
syncTimeoutSecs: 60
websocketTimeout: 10000

Persistence (Backend)

ParameterTypeDefault
backend.persistence.sizestring"3Gi"
backend.persistence.accessModeslist["ReadWriteOnce"]
backend.persistence.storageClassNamestring""
backend.localMountslist[]
backend.restore.enabledboolfalse
backend.restore.urlstring""

Networking (Backend)

ParameterTypeDefault
`backend.service.type”string"NodePort"
backend.service.portsobject{"gan":8060,"http":8088,"https":8043}
backend.service.nodePortsobject{}
backend.service.sessionAffinitystring"None"
backend.ingress.enabledboolfalse
backend.ingress.tlslist[]

Resources & Security (Backend)

ParameterTypeDefault
backend.resources.requestsobject{"cpu":"500m","memory":"1Gi"}
backend.resources.limits.cpustring"1000m"
backend.resources.limits.memorystring"2Gi"
backend.securityContextobject{"fsGroup":2003,"runAsGroup":2003,"runAsNonRoot":true,"runAsUser":2003}
backend.secretsobject{"GATEWAY_ADMIN_PASSWORD":"admin","IGNITION_GAN_KEYSTORE_PASSWORD":"metro","IGNITION_WEB_KEYSTORE_PASSWORD":"ignition"}
backend.sealedSecretsboolfalse

Probes (Backend)

ParameterTypeDefault
backend.livenessProbeobject(See below)
backend.readinessProbeobject(See below)

Default backend.livenessProbe:

command: ["/config/scripts/health-check.sh"]
enabled: true
failureThreshold: 3
initialDelaySeconds: 120
periodSeconds: 10
timeoutSeconds: 5

Default backend.readinessProbe:

command: ["/config/scripts/health-check.sh"]
enabled: true
failureThreshold: 10
initialDelaySeconds: 120
periodSeconds: 5
timeoutSeconds: 3

Frontend Configuration

The Frontend acts as the agent, serving client sessions (Perspective, Vision).

Ignition Settings (Frontend)

ParameterTypeDefault
frontend.configobject(See below)
frontend.argslist(See below)
frontend.logging.levelstring"INFO"
frontend.eam.rolestring"Agent"
frontend.tls.keystorePasswordstring"ignition"
frontend.gan.keystorePasswordstring"metro"

Default frontend.config:

ACCEPT_IGNITION_EULA: "Y"
DISABLE_QUICKSTART: "true"
GATEWAY_ADMIN_USERNAME: "admin"
GATEWAY_MODULES_ENABLED: "perspective,symbol-factory"
GATEWAY_NETWORK_REQUIRETWOWAYAUTH: "true"
GATEWAY_NETWORK_SECURITYPOLICY: "Unrestricted"
IGNITION_EDITION: "standard"

Default frontend.args:

- "-m"
- "1024"
- "-n"
- "$(GATEWAY_SYSTEM_NAME)"
- "--"
- "gateway.useProxyForwardedHeader=true"

Web Server SSL/TLS (Frontend)

ParameterTypeDefault
frontend.ssl.enabledboolfalse
frontend.ssl.secretNamestring""

Security & Monitoring (Frontend)

ParameterTypeDefault
frontend.networkPolicy.enabledboolfalse
frontend.serviceMonitor.enabledboolfalse
frontend.serviceMonitor.intervalstring"30s"

Scaling & HPA (Frontend)

ParameterTypeDefault
frontend.redundancy.replicasint1
frontend.hpa.enabledboolfalse
frontend.hpa.minReplicasint1
frontend.hpa.maxReplicasint10
frontend.hpa.targetCPUUtilizationPercentageint80

Networking (Frontend)

ParameterTypeDefault
frontend.service.typestring"NodePort"
frontend.service.portsobject{"gan":8060,"http":8088,"https":8043}
frontend.service.nodePortsobject{}
frontend.service.sessionAffinitystring"None"
frontend.ingress.enabledboolfalse
frontend.ingress.tlslist[]

Resources & Security (Frontend)

ParameterTypeDefault
frontend.resources.requestsobject{"cpu":"500m","memory":"1Gi"}
frontend.resources.limits.cpustring"1000m"
frontend.resources.limits.memorystring"2Gi"
frontend.localMountslist[]
frontend.securityContextobject{"fsGroup":2003,"runAsGroup":2003,"runAsNonRoot":true,"runAsUser":2003}
frontend.secretsobject{"GATEWAY_ADMIN_PASSWORD":"admin"}
frontend.sealedSecretsboolfalse

Probes (Frontend)

ParameterTypeDefault
frontend.livenessProbeobject(See below)
frontend.readinessProbeobject(See below)

Default frontend.livenessProbe:

command: ["/config/scripts/health-check.sh"]
enabled: true
failureThreshold: 3
initialDelaySeconds: 120
periodSeconds: 10
timeoutSeconds: 5

Default frontend.readinessProbe:

command: ["/config/scripts/health-check.sh"]
enabled: true
failureThreshold: 10
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 3