Skip to main content

infra.yaml Schema Reference

ReferencePublicUpdated 2026-04-08

Overview

infra.yaml configures the underlying infrastructure layer — cloud provider settings, networking, node groups, and storage. It is generated by smoothglue configure alongside platform.yaml and lives in the same working directory.

platform.yaml controls which applications are deployed. infra.yaml controls where and on what hardware they run.

File location

./ ← your working directory
├── platform.yaml ← app selection and platform settings
└── infra.yaml ← infrastructure topology settings

Top-level structure

provider: aws | gcp | azure | kvm
version: "1"
cluster:
name: ""
region: "" # cloud providers only
kubernetes_version: ""
network: {}
node_groups: []
storage: {}
registry: {}

Fields

provider

Required. The infrastructure target.

ValueDescription
awsAWS EKS — managed Kubernetes on EC2
gcpGCP GKE — partial support, see Known Gaps
azureAzure AKS — partial support, see Known Gaps
kvmOn-premises KVM / k3s — air-gap capable

cluster

FieldTypeDefaultDescription
namestringrequiredCluster name — used as prefix for all cloud resources
regionstringrequired (cloud)AWS region, GCP region, or Azure location
kubernetes_versionstring"1.29"Kubernetes version. Must match a version supported by your provider
ha_control_planeboolfalseMulti-AZ control plane (3 nodes). Adds ~30min to install.

network

FieldTypeDefaultDescription
vpc_cidrstring"10.0.0.0/16"VPC CIDR block (AWS/GCP/Azure)
pod_cidrstring"10.244.0.0/16"Pod network CIDR (Flannel/Cilium)
service_cidrstring"10.96.0.0/12"Kubernetes service CIDR
private_endpointsbooltrueRoute AWS API calls through VPC endpoints (no public internet)
proxy.enabledboolfalseEnable HTTP/HTTPS proxy for egress (air-gap environments)
proxy.http_proxystring""HTTP proxy URL
proxy.https_proxystring""HTTPS proxy URL
proxy.no_proxystring""Comma-separated no-proxy list

node_groups

Array of node group definitions. Each group maps to an EC2 Auto Scaling Group (AWS), GKE node pool, or KVM host group.

node_groups:
- name: platform
role: platform # platform | workload | edge
instance_type: m5.4xlarge
min_size: 2
max_size: 6
disk_size_gb: 200
labels:
node-role: platform
taints: []
FieldTypeDefaultDescription
namestringrequiredNode group name
roleenumrequiredplatform (runs SmoothGlue core), workload (app workloads), edge (KVM edge nodes)
instance_typestringrequiredEC2 instance type or KVM flavor
min_sizeint1Minimum node count
max_sizeintmin_sizeMaximum node count (enables autoscaling if > min_size)
disk_size_gbint100Root EBS volume or KVM disk size in GB
labelsmap{}Kubernetes node labels
taintslist[]Kubernetes node taints

Minimum sizing (Run template): m5.4xlarge × 2 nodes for the platform node group.


storage

FieldTypeDefaultDescription
default_storage_classstringgp3 (AWS)Default StorageClass for PersistentVolumeClaims
velero.enabledbooltrueEnable Velero backup (requires S3/GCS/Azure Blob)
velero.bucketstring""Backup destination bucket name
velero.regionstring""Backup bucket region
velero.schedulestring"0 2 * * *"Cron schedule for automated backups

registry

FieldTypeDefaultDescription
iron_bank.enabledbooltruePull platform base images from Iron Bank (DoD hardened registry)
iron_bank.registrystringregistry1.dso.milIron Bank registry URL
mirror.enabledboolfalseCache Iron Bank images in an on-prem mirror registry
mirror.urlstring""Mirror registry URL (for air-gap)

Complete example (AWS, Run template)

provider: aws
version: "1"

cluster:
name: my-smoothglue
region: us-east-1
kubernetes_version: "1.29"
ha_control_plane: true

network:
vpc_cidr: "10.0.0.0/16"
pod_cidr: "10.244.0.0/16"
service_cidr: "10.96.0.0/12"
private_endpoints: true

node_groups:
- name: platform
role: platform
instance_type: m5.4xlarge
min_size: 2
max_size: 6
disk_size_gb: 200

storage:
default_storage_class: gp3
velero:
enabled: true
bucket: my-smoothglue-backups
region: us-east-1
schedule: "0 2 * * *"

registry:
iron_bank:
enabled: true
registry: registry1.dso.mil

Known provider gaps

ProviderStatusGap
AWS EKSGAFull support
KVM (k3s)GAFull support, air-gap capable
GCP GKEPartialNetworking and storage fields not fully validated
Azure AKSPartialNode group autoscaling not implemented