ignition-failover

A Helm chart for failover Ignition Gateway with combined frontend/backend functionality. This chart deploys an Ignition Gateway configured for redundancy, capable of acting as both a frontend and backend in a simplified failover architecture.

Initialization Process

The following diagram illustrates how the chart initializes redundancy and handles certificate exchange during startup.

Note: The chart automatically creates two headless services (-primary and -backup) which always target pod ordinal 0 and 1 respectively, allowing for direct diagnostics of a specific node.

sequenceDiagram
    participant K8s as Kubernetes
    participant Init as Init Container
    participant Certs as Cert Manager
    participant Ignition as Ignition Gateway
    
    K8s->>Init: Start Pod
    Init->>Certs: Request GAN Certs
    Certs-->>Init: Mount Secrets (GAN TLS/CA)
    opt SSL Enabled
        K8s-->>Init: Mount Secret (Web TLS)
        Init->>Init: Prepare Web Keystore
    end
    Init->>Init: Generate Keystore (p12)
    Init->>Init: Seed Redundancy XML
    
    alt is Master (0)
        Init->>Init: Apply Master Config
    else is Backup (1)
        Init->>Init: Apply Backup Config
    end
    
    Init->>Ignition: Start Main Container
    Ignition->>Ignition: Load Keystores
    Ignition->>Ignition: Establish Gateway Network

Configuration

The following sections list the configurable parameters of the ignition-failover chart, broken down by category.

General Settings

Basic metadata and image configuration.

ParameterTypeDefault
applicationNamestring"ignition-failover"
image.repositorystring"inductiveautomation/ignition"
image.tagstring"8.3"
image.pullPolicystring"IfNotPresent"

Web Server SSL/TLS

Configuration for providing a custom keystore for the Web Server (HTTPS).

ParameterTypeDefault
ignition.ssl.enabledboolfalse
ignition.ssl.secretNamestring""

Security & Monitoring

Advanced security and observability settings.

ParameterTypeDefault
ignition.networkPolicy.enabledboolfalse
ignition.serviceMonitor.enabledboolfalse
ignition.serviceMonitor.intervalstring"30s"
ignition.serviceMonitor.pathstring"/data/metrics"

Ignition Configuration

Core Ignition Gateway settings, including EULA acceptance and module selection.

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

Default ignition.config:

ACCEPT_IGNITION_EULA: "Y"
DISABLE_QUICKSTART: "true"
GATEWAY_ADMIN_USERNAME: "admin"
GATEWAY_MODULES_ENABLED: "perspective,symbol-factory,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 ignition.args:

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

Redundancy

Settings to control the Gateway’s redundancy behavior.

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

Default ignition.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 & Storage

Configuration for persistent data storage.

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

Networking & Ingress

Service exposure and Ingress settings.

ParameterTypeDefault
ignition.service.typestring"NodePort"
ignition.service.portsobject{"gan":8060,"http":8088,"https":8043}
ignition.service.nodePortsobject{}
ignition.service.sessionAffinitystring"None"
ignition.ingress.enabledboolfalse
ignition.ingress.tlslist[]
certManager.issuer.namestring"cluster-issuer"
certManager.issuer.kindstring"ClusterIssuer"

Resources & Scheduling

CPU/Memory requests/limits and pod affinity.

ParameterTypeDefault
ignition.resources.requestsobject{"cpu":"500m","memory":"1Gi"}
ignition.resources.limits.cpustring"1000m"
ignition.resources.limits.memorystring"2Gi"
affinity.enabledboolfalse
affinity.typestring"soft"
affinity.topologyKeystring"kubernetes.io/hostname"

Probes

Health checks for the pod.

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

Default ignition.livenessProbe:

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

Default ignition.readinessProbe:

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

Security & Accounts

Security context and Service Account settings.

ParameterTypeDefault
ignition.securityContextobject{"fsGroup":2003,"runAsGroup":2003,"runAsNonRoot":true,"runAsUser":2003}
ignition.secretsobject{"GATEWAY_ADMIN_PASSWORD":"admin","IGNITION_GAN_KEYSTORE_PASSWORD":"metro","IGNITION_WEB_KEYSTORE_PASSWORD":"ignition"}
ignition.sealedSecretsboolfalse
serviceAccount.createboolfalse
serviceAccount.namestring""
serviceAccount.annotationsobject{}