# Metallb
# Was ist Metallb
## Kurzbeschrieb
Metallb ist ein Loadbalancer für Baremetal Kubernetes Cluster.
## Wie Funktioniert es?
Bei der Installation von Metallb wird ein Master Pod auf dem Cluster erstellt, so wie ein Speaker Pod auf jeder Node. Der Master Pod ist der Controller, welcher die Speakter kontrolliert. Mittels einer Configmap wird dem Metallb Deployment ein IP Bereich Zugewiesen, aus welchem die IPs frei verteilt werden können. Metallb routet danach die Anfragen zu den Richtigen Container / Pods.
## Warum Metallb?
Wenn man ein Service welcher auf mehreren Nodes Läuft veröffentlichen möchte, gibt es verschiedene Arten wie man dies tun kann.
1\. Cluster IP
Jeder Pod verfügt über eine Cluster IP, jedoch ist die Cluster IP nur intern vom Cluster erreichbar.
2\. Host-Port
In diesem Fall öffnet der Pod auf der Node, aufwelcher er aktuell läuft einen Host-Port, mit welchem man direkt auf den Pod zugreifen kann. Nachteil ist, dass dieser nur auf einer Node zur verfügung steht was bedeutet, dass bei einem Ausfall dieses Hosts der Pod nicht mehr erreichbar ist.
3\. Node-Port
In diesem Fall öffnet der Pod auf jeder Node einen Gewissen Port, aus der Port range von Kubernetes(30'000 - 32768), sämtliche Nodes leiten allen verkehr, welcher über einen bestimmten Port kommen an den Pod weiter. Nachteil ist, wenn alle Ports verwendet werden ist der ganze Spass vorbei & es werden keine Floating & Virtual IP's unterstützt.
4\. Loadbalancer
Metallb ist ein Loadbalancer, dieser unterstützt Floating & virtual IP's, was die perfekte Redundanz ermöglicht. Kubernetes kann mit diesem Loadbalancer die Redundanz auf Layer 2 absichern.
# Installation von Metallb
## Voraussetzungen
- Funktionsfähiges Kubernetes Cluster
- Verbindung mittels kubectl auf das Cluster
- [Offizielle Ressourcen Metallb](https://metallb.universe.tf/installation/)
## Installation
Bitte beachten Sie das es aktuellere Version von Metallb geben wird. Installieren Sie wenn möglich die neuste Version.
### Erstellung des Namespace
Führen Sie den folgenden Befehl aus um einenen neuen Namespace für metallb zu erstellen.
`kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml`
Anschliessend können Sie mit dem Befehl: `kubectl get namespaces` überprüfen, ob ein neuer Namespace für Metallb erstellt wurde. Dieser hat den Namen "metallb-system"
### Anwenden des Manifests
Bei der Installation des Manifests werden der Master Pod sowie die Speaker erstellt.
`kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml`
Anschliessend können Sie mit dem Befehl: `kubectl get all -n metallb-system` überprüfen, ob der Master so wie de Speaker auf laufen.