MetalLB

MetalLB ist eine Load Balancing Lösung für Kubernetes. Unter https://metallb.universe.tf/ sind die Dokumentation und eine Anleitung zu Installation für die aktuelle Version zu finden. Mit MetalLB lassen sich Load Balancer wie z.B. ein Ingress Service leicht nach außen publizieren, da der Service mit BGP4 über einen Router zugänglich gemacht werden kann.

Voraussetzungen

Bevor MetalLB installiert werden kann, müssen Worker Nodes verfügbar sein. Auf Control-Planes kann MetalLB per Default nicht installiert werden.

Installation

Hier ein Beispiel für die Installation:

VERSION="v0.10.2"
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/${VERSION}/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/${VERSION}/manifests/metallb.yaml
# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

Mit kubectl get pods -n metallb-system -o wide kann man sehen, ob die Installation geklappt hat.

BGP

Damit ein externer Router über Veränderungen in den Load Balacer Netzen Informationen bekommen, ist BGP4 optimal. Dazu wird eine Datei config.yaml erstellt:


apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
peers:
- peer-address: 192.168.47.2
peer-asn: 64512
my-asn: 64512
address-pools:
- name: default
protocol: bgp
addresses:
- 172.17.1.0/24

Mit kubectl apply -f config.yaml wird diese Konfiguration aktiviert. Jetzt ist MetalLB aktiv und Load-Balancer Deployments werden nach außen über BGP sichtbar gemacht.

Routing

Leider konfiguriert MetalLB den Adresspool nicht auf den Control Planes. Aus diesem Grund müssen die IP Netze der Pools manuell konfiguriert werden mit

ip route add 172.17.1.0/24 dev eth0

Wobei eth0 durch das verwendete Interface ersetzt werden muss.

 

ToDo: Koexistenz BGP4 Routing mit MetalLB und Calico