$ k8scalc compare keepalived metallb
Keepalived vs MetalLB
Keepalived vs MetalLB for bare metal Kubernetes load balancing — when to use VRRP Floating IPs with HAProxy vs MetalLB's BGP/L2 mode for in-cluster load balancing.
FeatureKeepalivedMetalLB
Lives inside Kubernetes
No (external VMs)
Yes (operator)
Hetzner Floating IP
Yes (native VRRP)
Workaround needed
Survives cluster failure
Yes
No
BGP announcement
No
Yes
Config approach
Config file on host
CRDs
L2 ARP announcement
No
Yes
Paired with
HAProxy
Any ingress controller
Complexity
Low (2 VMs)—
Low (operator install)—
LoadBalancer services
No
Yes (native)
Verdict
These tools solve different problems. Keepalived (VRRP) is the right choice for the Hetzner setup: run HAProxy VMs outside the cluster with Keepalived providing a shared Floating IP between them — this survives total cluster failures. MetalLB lives inside Kubernetes and announces LoadBalancer IPs via L2 ARP or BGP — ideal for on-cluster load balancing without external VMs. For production Hetzner clusters, use both: Keepalived+HAProxy for the K8s API and primary ingress entry point, MetalLB for secondary services needing their own external IP.