kube-vip provides a virtual IP and L4 load balancer for Kubernetes on bare metal, where there is no cloud LB sitting in front of the cluster. It handles two distinct jobs: HA for the control plane (a floating VIP in front of the kube-apiserver) and Service type LoadBalancer implementation for workload traffic.
It runs as a static pod on control plane nodes or a DaemonSet on workers and supports two announcement modes. In ARP/Layer 2 mode, a leader elected via a Kubernetes lease emits gratuitous ARPs for the VIP; on failover the next leader takes over the address, same pattern as keepalived. In BGP mode it peers with your top-of-rack routers (or a route reflector) and announces VIPs as /32 routes, enabling ECMP across nodes and routable failover across L3 boundaries. For Service LoadBalancer it allocates IPs from a configured pool and optionally integrates with kube-vip-cloud-provider to implement the standard LoadBalancer status handshake.
It is the default LB in Kubernetes the Hard Way-style bare-metal installs and in distros like k3s, RKE2, Talos, and Cluster API’s CAPV/CAPBM. The main alternative is MetalLB — kube-vip’s advantage is the combined control-plane VIP + Service LB in one component, whereas MetalLB only handles Services.