
Ich habe versucht, Wireguard für einen K3s-Multisite-Cluster zu konfigurieren. Mein Problem ist das Routing. Es gibt mindestens 4 Knoten, 2 an einem Standort + 1 an einem anderen Standort und + 1 an einem anderen Standort.
Annahmen:
- Das Netzwerk 10.50.0.0/16 ist für physische Knoten
- Das Netzwerk 10.42.0.0/16 ist für Pods
- Das Netzwerk 10.43.0.0/16 ist für Dienste
- Jeder physische Knoten kann einen Pod erstellen, dem eine eindeutige IP-Adresse im Bereich 10.42.0.0/16 zugewiesen ist.
- Jeder Pod auf jedem physischen Knoten sollte in der Lage sein, sich gegenseitig anzupingen
Die bereitgestellte Konfiguration funktionierte nur zwischen den letzten beiden Knoten, die restlichen Knoten können sich nicht einmal gegenseitig anpingen. Ich vermute, dass es etwas mit dem Routing zu tun haben könnte, aber ich habe nicht genug Wissen, um das zu überprüfen.
Beispielkonfigurationen von zwei Knoten:
10.50.54.100:
[Interface]
# primary-1
Address = 10.50.54.100/24
PrivateKey = pr111111111111111111111111111111111111111111
ListenPort = 443
MTU = 1500
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = ufw allow 443/udp || true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w -q net.ipv4.ip_forward=0
PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward
[Peer]
# infra-1
PublicKey = pub11111111111111111111111111111111111111111
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = xxxxxxxxxx:443
[Peer]
# compute-2
PublicKey = pub2222222222222222222222222222222222222222
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = yyyyyyyyyy:443
[Peer]
# storage-1
PublicKey = pub3333333333333333333333333333333333333333
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = zzzzzzzzzzz:443
10.50.54.2:
[Interface]
# infra-1
Address = 10.50.54.2/24
PrivateKey = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ListenPort = 443
MTU = 1500
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = ufw allow 51820/udp || true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w -q net.ipv4.ip_forward=0
PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward
[Peer]
# primary-1
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = xxxxxxxxxxxx:443
[Peer]
# compute-2
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = yyyyyyyyyyy:443
[Peer]
# storage-1
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = zzzzzzzzzzzz:443
Habt ihr eine Ahnung, wie das mit Wireguard aussehen soll? Warum diese Konfiguration nicht funktioniert?
Danke!
Antwort1
(Entschuldigung, das sollte wahrscheinlich ein Kommentar sein, da ich nicht 100 % sicher bin, ob es richtig ist, aber mein Ruf auf dieser Site ist noch nicht gut genug, um Kommentare zu verwenden.)
Ich glaube, dass die Bereiche AllowedIPs
für jeden [Peer]
eindeutig sein müssen (d. h. sich nicht überschneiden), weil WireGuard so weiß, an welchen Peer ein bestimmtes ausgehendes Paket weitergeleitet werden soll. Wenn ja, müssten Sie für jede Site separate IP-Bereiche einrichten (für Pods und Dienste – Knoten sollten keine Rolle spielen).
Ich habe es nie mit überlappenden Bereichen ausprobiert, um zu sehen, was es bewirkt, und die Dokumentation ist diesbezüglich nicht ganz eindeutig, aber sie scheint anzudeuten, dass dies nicht unterstützt wird. (Wenn es unterstützt würde, müsste es entweder jedes Paket an alle Peers senden, die AllowedIPs
die Zieladresse des Pakets enthalten, oder etwas wie ARP verwenden, um das Routing dynamisch zu ermitteln.)
Ich kenne mich damit nicht so gut aus k3s
und bin mir daher nicht sicher, wie der Multi-Site-Cluster funktioniert. Handelt es sich dabei im Grunde nur um mehrere separate Kubernetes-Cluster, die zentral verwaltet werden?