LoadBalancer met MetalLB

De cloud-providers geven de mogelijkheid om een service van het type ‘LoadBalancer’ aan te maken die op de achtergrond de provider’s functies gebruikt. In het geval van een zogenaamde ‘bare metal’ installatie (zoals mijn Kubernetes Cluster op RPi) is deze functie niet aanwezig en zal je zelf dit moeten installeren. MetalLB geeft deze mogelijkheid en biedt, in tegenstelling tot Ingress, meer opties dan alleen http of https.

Installatie van de MetalLB controller gaat middels een 3-tal apply commando’s:

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

en deze maakt de namespace en daarin de deployments aan en zodra dit gereed is kan een IP-adres-pool aangemaakt worden.

De namespace is ‘metallb-system’ en daarin wordt de controller-deployment gemaakt. Hierin bevinden zich een aantal workloads:

  • controller-pod die de ip adressen aan de services bindt
  • speaker-daemonset die de gewenste protocollen verzorgt
  • secret memberlist die de communicatie met ‘dead node detection‘ encrypt

In de configuratie van MetalLB dient een ConfigMap een sectie te bevatten met daarin een ‘pool’ van IP-adressen die gebruikt kunnen worden voor het uitgeven van die IP adressen aan de loadbalancer services. Bijvoorbeeld:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
  namespace: metallb-system
data:
   config: |
     address-pools:
     - name: default
       protocol: layer2
       addresses:
       - 192.168.178.206-192.168.178.210

De ConfigMap wordt ook applied:

$ kubectl apply -f metallb-cm.yml

En hierna is de cluster gereed om LoadBalancer aan te kunnen maken. Zie ook mijn Canary app via LoadBalancer pagina.