VXLAN auf LXDBR mit Dummy-Interface (Ubuntu-Server 22.04)

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.