Ephemeral Castle: Terraform Modules Detail

Level 3 (Detail) — The 6 reusable Terraform modules for cluster provisioning.

Concept

Each Terragrunt layer maps to a Terraform module under clusters/tazlab-k8s/modules/. Modules are reusable across clusters; cluster-specific configuration comes from live/env.hcl.

Module Inventory

1. secrets-fetcher

FieldValue
Layersecrets (Layer 1)
PurposeFetch bootstrap secrets from operator environment (env vars da Vault o ~/secrets/)
Key inputsPROXMOX_TOKEN_ID, PROXMOX_TOKEN_SECRET, TALOS_SECRETBOX_KEY (from env vars)
Key outputsPROXMOX_TOKEN, TALOS_SECRETBOX_KEY

2. proxmox-talos

FieldValue
Layerplatform (Layer 2)
PurposeCreate Proxmox VMs, bootstrap Talos cluster
Key inputsProxmox token, Talos config
Key outputsKubeconfig, talosconfig

3. k8s-engine

FieldValue
Layerengine (Layer 3)
PurposeBootstrap namespaces e bootstrap secrets per secret delivery (ESO + VSO), PGO user secrets pre-seed
Key inputsvault_ca_cert, vault_eso_token, tailscale_client_id, tailscale_client_secret (stringhe dirette da env vars, non file path) + 4 PGO password vars
Key outputsvault-ca-cert Secret (2 namespace), vault-eso-token Secret, tailscale-operator-oauth Secret, 4 PGO user Secrets

Il modulo crea 4 K8s Secret Opaque bootstrap (senza ExternalSecret nè VSO):

  • vault-ca-cert (ca.crt) in external-secrets — per ESO ClusterSecretStore TLS validation (dormant)
  • vault-ca-cert (ca.crt) in vso-system — per VSO VaultConnection TLS verification (attivo)
  • vault-eso-token (token) in external-secrets — per ESO authentication su Vault (dormant)
  • tailscale-operator-oauth (clientId + clientSecret) in tailscale — per Tailscale Operator join tailnet

Crea inoltre 4 PGO user Secrets nel namespace tazlab-db per adozione utenti PostgreSQL (tazlab-db-pguser-{tazlab-admin,grafana,mnemosyne,pgadmin}).

Nota: ESO e installato e gestito da Flux (HelmRelease), non da questo modulo. ESO e dormiente — Vault Secrets Operator (VSO) e l’operatore attivo per secret delivery via CRD VaultStaticSecret/VaultPKISecret/VaultDynamicSecret. Questo modulo prepara il namespace vso-system e il seed vault-ca-cert per VSO, ma VSO stesso e deployato da Flux in tazlab-k8s/infrastructure/operators/vso/.

4. k8s-networking

FieldValue
Layernetworking (Layer 4a)
PurposeInstall MetalLB v0.14.8, IPAddressPool, memberlist secret
Key inputsMetalLB IP range (192.168.1.240-250)
Key outputsLoadBalancer IP assignment

5. k8s-flux

FieldValue
Layergitops (Layer 4b)
PurposeCreate cluster-vars ConfigMap, bootstrap Flux
Key inputsGitHub token, Flux repo URL
Key outputsFlux reconciliation of tazlab-k8s

6. k8s-storage

FieldValue
Layerstorage (Layer 5)
PurposeInstall Longhorn v1.7.2, StorageClass, S3 backup
Key inputsS3 bucket credentials (da Vault via ExternalSecret)
Key outputstazlab-storage StorageClass

Build Order

1. secrets ──► 2. platform ──► 3. engine ──► 4a. networking ──► 5. storage
                                          └► 4b. gitops (parallel to networking)
6. gcp-services (standalone)

See Also