Load Balancing in Highly-Available Clusters
For providers that doesn’t support LoadBalancer as a Service functionality, we
included a working example of how it might look like in your setup. Provided
example is not a requirement and you can always use your own solution.
What software is used?
For those examples, we use gobetween project. It is free, open-source,
modern & minimalistic L4 load balancer solutions that’s easy to integrate into
terraform.
But it’s a SPoF (Single Point of Failure)!
Yes, it is. We provide this only as an example how it might look like, and at
the same time trying to stay minimal on resources. Since the provider which you’re using doesn’t support LBaaS, it’s completely up to you how you organize your frontend
loadbalancing and HA for your kube-apiservers.
Possibilities to achieve truly HA loadbalancing is to bootstrap 2 of those LBs
and use one of the following:
- DNS to point to both machines.
- keepalived and VirtualIP if provider allows it.
- use some external software with predefined IPs and exclude gobetween bits from
terraform entirely.
What about my Haproxy/nginx/your favorite proxy solution?
As our example in terraform is exactly this — just an example, you are free to
use whatever else solution. Gobetween is not a requirement. The only requirement
would be to provide apiEndpoint.host
(and optional apiEndpoint.port
) in
configuration, or terraform outputs kubeone_api.values.endpoint
.
Can this be used as a loadbalancer for Ingress?
No, provided example loadbalancer solution only cares about kubernetes API
availability, it’s not universal solution for all your workloads.