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