Until recently, Kubernetes did not have the native support for load balancing for the bare metal clusters. MetalLB is the new solution, currently in alpha version, aiming to close that gap.
As of now, Kubernetes comes with Network LB solution, which is actually a glue code calling for various IaaS cloud platforms (AWS, Azure, GCP, etc.). However, deploying Kubernetes on anything but the supported platforms (like a private cloud or a bare metal cluster) resulted in service objects with
spec.type=LoadBalancer
to remain in Pending status forever.
Thus said, going for bare metal clusters left Kubernetes administrators with the choice between Nodeport and ExternalIPs, none of which was a perfect solution. MetalLB, a new load balancer offers a Network LB implementation that works on top of standard network equipment.
The prerequisites for MetalLB stable operation include:
Here are more details of the requirements. As MetalLB project will surely evolve, please refer to the maturity page for explanations.
You can test the self-contained minikube MetalLB functionality by following this tutorial. To deploy this tool to a production cluster, please head to the installation and usage guides. This detailed design document will help you get the tool up and running in no time.
In case you wish to take part in the project evolution — please follow this hacking guide for technical info. Any usage feedback and suggestions will make the MetalLB developers very happy, so feel free to share your thoughts and ideas!
Previously I’ve posted this article in my company’s blog: https://itsvit.com/blog/metallb-load-balancer-bare-metal-kubernetes-clusters/