MetalLB, the bare-metal Load Balancer
A good article is written here.
Kubernetes was primarily designed for the cloud. Most clouds have a Cloud Load Balancer. On bare-metal, that load balancer doesn't exist.
A proper solution would have been to use a dedicated appliance or software (like HAproxy) which is outside the Kubernetes cluster. The ingresses (like Traefik) would have been configured using NodePort services.
However, MetalLB is inside the Kubernetes Cluster and permits the use of LoadBalancer services. The experience becomes extremely similar to the cloud and load balancing is resolved using L2 or L3 (BGP) solutions.
Using a self-provisioned edge is surely the most stable and suitable solution since MetalLB is still young. However, MetalLB allows for a proper Kubernetes experience.