threat model

assets

  • k3s node and workloads
  • cloudflare api token for dns-01
  • sops age private key
  • tailscale tailnet identity
  • edge vps root access
  • persistent app data

design choices that reduce risk

  • no tls private keys on edge vps
  • no public k3s api exposure
  • no port 80 requirement
  • dns-01 cert issuance instead of http-01
  • encrypted secrets in git via sops+age
  • edge vps can be rebuilt from config

main risks

  • compromised vps can forward or disrupt traffic
  • compromised tailnet device can reach tailnet services
  • single node failure loses availability until restore
  • local storage has no replication
  • bad flux commit can break cluster state

mitigations

  • keep vps minimal and patched
  • tailscale device approval and key expiry hygiene
  • restic backups with restore drills
  • branch protection and review for flux paths once stable
  • least-privilege cloudflare token scoped to dns edit for k3x.dev