Metadata-Version: 2.1
Name: lb-controller
Version: 0.0.4
Summary: A controller to auto configure k8s load balancer on premise
Home-page: UNKNOWN
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Dist: kubernetes (==9.0.0)
Requires-Dist: kubernetes-asyncio (==9.1.0)
Requires-Dist: jinja2 (==2.10.1)
Requires-Dist: prometheus-client (==0.7.1)
Provides-Extra: tests
Requires-Dist: pytest (==4.6.3) ; extra == 'tests'

# What's that thing?

`lb-controller` is kubernetes operator that can handle dynamic reconfiguration
of an external load balancer, *e.g* haproxy, it aims to allow the use of the
`LoadBalancer` service type with on premise clusters.

This operator is not deployed in the K8s cluster but on the load balancers and
is a subscriber of the cluster events to know when it has to wake up and do its
thing.

We thought of 3 scenarios while building this app :

  - HAProxy + keepalived
  - Envoy + keepalived
  - keepalived only


The advantage of this implementation compared to [MetalLB](https://metallb.universe.tf/)
is that you gain the ability to completely master the LB configuration, for
example ipv6 to ipv4 or specific SSL configurations.

# How should I integrate `lb-controller`

* Install haproxy and keepalived
* pip install lb-controller
* add the configurations in /etc/lb-controller/
* Define a dedicated service account to consume only the appropriate resources
  from the cluster API server
* set this identity in the `/root/.kube/config` file on the HAProxy hosts.

You can find an ansible role at this adress ... as an example.


# Metrics

This app exposes two metrics in the openmetrics format to be scrape by
prometheus for example:
- number of valid loadbalancers
- number of invalid loadbalancers


