4.2 MetalLB

MetalLB wurde als Load-Balancer für den Kubernetes-Cluster ausgewählt, da es eine einfache und flexible Möglichkeit bietet, Dienste mit extern zugreifbaren IP-Adressen zu versehen. Dies ist besonders in einer On-Premise-Umgebung wichtig, da dort keine nativen Cloud-Load-Balancer verfügbar sind. MetalLB ermöglicht es, den Zugriff auf Dienste außerhalb des Clusters zu gewährleisten, indem es eine feste Zuordnung von IP-Adressen aus einem definierten Pool bereitstellt.

Installation von MetalLB

Die Installation erfolgt direkt im Kubernetes-Cluster und umfasst die folgenden Schritte:

1. Namespace erstellen

MetalLB wird in einem eigenen Namespace installiert, um die Ressourcen zu isolieren:

kubectl create namespace metallb-system

2. Installation mittels Manifeste

Die Installation erfolgt über die offiziellen Manifeste:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/main/manifests/metallb-native.yaml

3. Bereitstellung konfigurieren

MetalLB benötigt eine Konfigurationsdatei, die den IP-Bereich definiert, aus dem externe IPs vergeben werden. Diese Konfiguration ermöglicht es, dass Dienste vom Cluster aus über definierte IP-Adressen erreichbar sind.

Beispiel-Konfigurationsdatei ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
  labels:
    app: metallb
data:
  config: |
    address-pools:
    - name: default-pool
      protocol: layer2
      addresses:
      - 192.168.1.100-192.168.1.200

Diese Konfiguration legt den IP-Bereich von 192.168.1.100 bis 192.168.1.200 fest. MetalLB weist aus diesem Bereich externe IP-Adressen für LoadBalancer-Services zu und sorgt so für die Erreichbarkeit der Dienste außerhalb des Clusters.

Die Konfiguration wird wie folgt angewendet:

kubectl apply -f metallb-config.yaml

Testen von MetalLB

Um die Funktionalität von MetalLB zu überprüfen, wird ein einfacher Service erstellt.

1. Deployment eines Test-Pods

Ein einfacher NGINX-Pod wird erstellt:

kubectl run nginx --image=nginx --port=80

2. Service erstellen

Ein Service mit LoadBalancer-Typ wird erstellt, um eine externe IP zuzuweisen:

kubectl expose pod nginx --type=LoadBalancer --name=nginx-service

3. Überprüfen der Zuweisung

Prüfen, ob MetalLB eine externe IP-Adresse zugewiesen hat:

kubectl get svc nginx-service

Erwartetes Ergebnis:

NAME            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
nginx-service   LoadBalancer   10.96.250.25    192.168.1.101    80:31564/TCP   1m

4. Zugriff testen

Der Zugriff auf den Service kann über die zugewiesene externe IP erfolgen:

curl http://192.168.1.101

Wenn die NGINX-Standardseite angezeigt wird, funktioniert MetalLB korrekt.

Weitere Informationen

Details zur Konfiguration und erweiterten Einstellungen von MetalLB sind in der offiziellen MetalLB-Dokumentationverfügbar.