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
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.
MetalLB prerequisites and requirements
The prerequisites for MetalLB stable operation include:
- A clean Kubernetes cluster version 1.8.0 or above, without any other load balancing solution installed
- One or several BGP routers working with 4-byte AS numbers (RFC 6793)
- A bundle of IPv4 addresses for the routers to assign
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/