Hallo Freunde der Sonne,
in diesem Beitrag geht es darum, über ein Layer3-Netzwerk (Routing) eine Layer2-Bridge einzurichten.
Im Endeffekt, habe ich dann Container auf 2 Servern in einem selben IP-Netzwerk, welche ich dann Clustern kann.
VXLAN auf LXDBR mit Dummy-Interface (Ubuntu-Server 22.04)
IP-Routing auf dem Server aktivieren
Zu aller Erst, bitte das IP-Routing im Kernel aktivieren, hierfür bitte folgende Datei überarbeiten: /etc/sysctl.conf
net.ipv4.ip_forward=1
Danach ein:
sysctl -p
Welches die Anpassung bestätigen sollte.
Dummy-Interface einrichten
Für den Quell-/Zielserver habe ich eigene Dummy-Interfaces als Ziel angelegt, damit es egal ist, über welche Schnittstelle geroutet wird.
Einfach folgende Dateien erstellen und das Netzwerk oder den Server neustarten:
Das Interface wird hier definiert: /etc/systemd/network/intern0.netdev
[NetDev] Name=intern0 Kind=dummy
Die Netzwerkkonfiguration des Interfaces findet hier statt: /etc/systemd/network/intern0.network
(die IPs sind jetzt Beispiele die ich unten fortsetze)
[Match] Name=intern0 [Network] Address=10.1.130.1/32 DNS = 10.1.130.1 DNS = 10.1.130.2 Domains=hierkoennttedeinnamestehen.de
Dynamisches Routing aktivieren
Hier gibt es einen eigenen Beitrag, siehe hier.
VXLAN-Tunnel einrichten
Nun kann der VXLAN-Tunnel definiert und an Schnittstellen gebunden werden.
ip link add vxlan10 type vxlan id 10 local 10.1.130.1 remote 10.1.130.2 dstport 4789 ip link set vxlan10 master lxdbr0 ip link set up vxlan10
Das Skript muss selbstverständlich auf beiden Servern angelegt werden, sonst gibt es keine Antworten vom Gegenüber.
Die oberen Konfigurationszeilen, habe ich danach in ein Skript ausgelagert, welches sich später unter /root/vxlan10.sh wiederfindet.
Den Aufbau der Bridge lasse ich dann per Skript über die /etc/crontab starten:
@reboot root sleep 60 && /root/vxlan10.sh
Pacemaker unter LXD-Container
Mir ist aufgefallen, dass nach einem Neustart die Autoconfig bzw. die CloutInitTools die Konfiguration des Pacemaker stören.
Daher die Lösung – diese neu Initialisieren nach Neustart. Also in dem Container die /etc/crontab bearbeiten.
@reboot root sleep 10 && pcs node unstandby 10.1.128.67
Falls dies nach einem kurzen Testlauf nicht funktionieren sollte, so vorher abwechselnden Neustart des Pacemakers prüfen.
pcs cluster destroy node 10.1.128.67 pcs cluster node add 10.1.128.67 --start --enable pcs cluster recover pcs cluster unstandby 10.1.128.67
Nachtrag
Hier muss man an sich nichts anpassen, da man dem LXD generell auf beiden Servern (Quelle & Ziel) das selbe Netzwerk konfiguriert.
Die Zuweisung erfolgt meines Wissens nicht über DHCP, sondern per CloudInitTool des Containers, daher habe ich keine Probleme festgestellt.
Das Gateway sollte pro Server unterschiedlich seien – zum einen lässt sich damit der Host identifizieren,
zum anderen werden Adresskonflikte vermieden.
Im Zweifel schickt ein Client eine Anfrage über einen der beiden Server ein,
das Paket wird automatisch an beide per VXLAN-Bridge übertragen und der jeweilige Container wertet dieses aus.
Durch die Layer2-Bereitstellung, können sich die Container in einem Cluster befinden (aka Pacemaker).
Da beide das Paket erhalten, kann der Master des Clusters antworten.
Dank des dynamisches Routings, ist es dann auch egal, über welches Gateway der jeweilige Container die Antwort an den Client sendet.