Vai al contenuto

Infrastructure

Platform components in infrastructure/, deployed before applications.

Components

MetalLB

Layer 2 load balancer for bare-metal.

  • IP Pool: 192.168.178.10192.168.178.40
  • Mode: L2 Advertisement on interface eth0
  • Namespace: metallb

Traefik

Ingress controller and API Gateway.

  • Chart: traefik v37.3.0
  • Replicas: 2 (high availability)
  • Protocol: Gateway API (native, no legacy Ingress)
  • Ports: 80 (web) → HTTPS redirect, 443 (websecure) with TLS
  • Global middleware: automatic HTTP→HTTPS redirect
  • TLS: wildcard cert via cert-manager

cert-manager

Automatic TLS certificate management.

  • Issuer: Let's Encrypt (production)
  • Challenge: DNS-01 via Cloudflare API
  • Certificate: wildcard *.${DOMAIN}
  • Cloudflare Secret: encrypted with SOPS

NFS-CSI Driver

Storage provisioner for persistent volumes.

  • NFS Server: 192.168.178.162 (Proxmox host)
  • StorageClass: nfs-flash (SSD), nfs-spacex (HDD)
  • Reclaim Policy: Retain (no data deleted automatically)
  • SubDir template: ${namespace}/${pvc-name}

Gateway API CRDs

Custom Resource Definitions for Gateway API (HTTPRoute, Gateway, GatewayClass), managed separately from the Traefik chart to avoid upgrade conflicts.

kube-system

Patch to the system namespace (e.g. metrics-server).

Notifications (Flux → Telegram)

Flux CD alerts sent to Telegram when a deploy fails.

  • Provider: Telegram Bot
  • Severity: only error (no noise from normal events)
  • Monitored sources: GitRepository, Kustomization, HelmRepository, HelmRelease

Deploy order

graph LR
    CRDs[crds] --> MetalLB[metallb]
    CRDs --> CertManager[cert-manager]
    CRDs --> NFS[nfs-csi]
    MetalLB --> Traefik[traefik]
    CertManager --> Traefik
    NFS --> Apps[apps...]
    Traefik --> Apps

Order is guaranteed by dependsOn in the Flux Kustomization.