Homelab · architecture · 2026-10-19

One box, two lanes, two floating IPs.

Web traffic enters at 192.168.1.200 and is carried by MetalLB and Traefik into Kubernetes. Database traffic enters at 192.168.1.150 and is carried by keepalived and HAProxy to the Patroni leader. Each address floats between VMs, but all of them run on one GMKtec host.

Homelab architecture Architecture diagram of one Proxmox host with a web lane (Traefik and a three-node Kubernetes cluster behind floating IP .200) and a database lane (HAProxy and a three-node Patroni PostgreSQL cluster behind floating IP .150), with Cloudflare DNS, GitHub and an NFS server around it. ONE HOST · EVERYTHING FAILS TOGETHER pve 192.168.1.100 · Proxmox VE 9 · 24.5 of 30 GiB Tailscale subnet router · pg-1/2/3 built by Terraform WEB TRAFFIC · FLOATING IP 192.168.1.200 DATABASE TRAFFIC · FLOATING IP 192.168.1.150 DNS HTTPS SQL POD IP NFS LEADER GITOPS DNS Cloudflare DNS *.home.sirasith.net → .200 proxy OFF GIT GitHub app manifests · Terraform Argo CD pulls EXT Clients Mac · phone (Tailscale) browser · DBeaver VIP Traefik VIP .200 · MetalLB L2 HTTPS :443 · TLS K8S Kubernetes cluster cp-1 · worker-1 · worker-2 Calico · Longhorn · Argo CD NFS nas 192.168.1.104 · NFS /srv/nfs → 192.168.1.0/24 VIP HAProxy + keepalived VIP .150 · :5000 on all three pg nodes DB PostgreSQL HA (pg-ha) pg-1 · pg-2 · pg-3 · .151–.153 Patroni · etcd · PostgreSQL 18 Patroni keeps the leader lock in etcd. HAProxy asks every node on :8008. LEGEND Floating IP (VIP) Kubernetes / web Database External Failure boundary Lookup / sync