This repository implements in-process L7 load balancing algorithms for Kubernetes processes.
- Go library for your Go microservices.
- Uses the Kubernetes built-in Service discovery mechanism to find out which endpoints requests can be routed to.
- Offers an abstraction to implement a variety of L7 load balancing mechanisms.
- Implements affinity and non-affinity algorithms.
- List of supported algorithms:
XXX
The Kubernetes Service abstraction is implemented as a L4 load balancer using iptables DNAT on each node to route the Service Virtual IPs to pod IPs.
Unfortunately, this leaves user without much control about where the requests are going. Worse there are cases where L4 fails entirely to load balance anything: think about HTTP/2 multiplexing all requests onto the same connection!
My Kubecon talk (Copenhagen, May 2018), The Untapped Power of Services - L7 Load Balancing Without a Service Mesh gives a lot more details about the reasons I've started this work.
The talk is available in video format: