mirror of
https://github.com/cloudnativelabs/kube-router.git
synced 2025-09-24 01:21:06 +02:00
87 lines
2.5 KiB
Markdown
87 lines
2.5 KiB
Markdown
# Load Balancer allocator
|
|
|
|
## What does it do
|
|
|
|
The load balancer allocator controller looks for services with the type LoadBalancer and tries to allocate addresses for
|
|
it if needed. The controller doesn't enable any announcement of the addresses by default, so
|
|
`--advertise-loadbalancer-ip` should be set to true and BGP peers configured.
|
|
|
|
## Load balancer classes
|
|
|
|
By default the controller allocates addresses for all LoadBalancer services with the where `loadBalancerClass` is empty
|
|
or set to one of "default" or "kube-router". If `--loadbalancer-default-class` is set to false, the controller will only
|
|
handle services with the class set to "kube-router".
|
|
|
|
## RBAC permissions
|
|
|
|
The controller needs some extra permissions to get, create and update leases for leader election and to update services
|
|
with allocated addresses.
|
|
|
|
Example permissions:
|
|
|
|
```yaml
|
|
kind: ClusterRole
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
metadata:
|
|
name: kube-router
|
|
namespace: kube-system
|
|
rules:
|
|
- apiGroups:
|
|
- "coordination.k8s.io"
|
|
resources:
|
|
- leases
|
|
verbs:
|
|
- get
|
|
- create
|
|
- update
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- services/status
|
|
verbs:
|
|
- update
|
|
```
|
|
|
|
## Environment variables
|
|
|
|
The controller uses the environment variable `POD_NAME` as the identify for the lease used for leader election.
|
|
Using the kubernetes downward api to set `POD_NAME` to the pod name the lease identify will match the current leader.
|
|
|
|
```yaml
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: DaemonSet
|
|
metadata:
|
|
labels:
|
|
k8s-app: kube-router
|
|
tier: node
|
|
name: kube-router
|
|
namespace: kube-system
|
|
spec:
|
|
...
|
|
template:
|
|
metadata:
|
|
....
|
|
spec:
|
|
...
|
|
env:
|
|
- name: POD_NAME
|
|
valueFrom:
|
|
fieldRef:
|
|
fieldPath: metadata.name
|
|
...
|
|
```
|
|
|
|
The environment variable `POD_NAMESPACE` can also be specified to set the namespace used for the lease.
|
|
By default the namespace is looked up from within the pod using `/var/run/secrets/kubernetes.io/serviceaccount/namespace`.
|
|
|
|
## Running outside kubernetes
|
|
|
|
When running the controller outside a pod, both `POD_NAME` and `POD_NAMESPACE` must set for the controller to work.
|
|
`POD_NAME` should be unique per instance, so using for example the hostname of the machine might be a good idea.
|
|
`POD_NAMESPACE` must be the same across all instances running in the same cluster.
|
|
|
|
## Notes
|
|
|
|
It's not possible to specify the addresses for the load balancer services. A externalIP service can be used instead.
|