Wireguard im Swarm-Cluster
Ich habe immer noch das Gefühl, dass Docker Swarm unterschätzt wird. Swarm ist großartig für einfache Workloads, besonders wenn Sie lokal arbeiten. Wenn Sie Swarm auf einem VPS nutzen, ist es sehr nützlich, die Möglichkeit zu haben, sich von außen mit dem Swarm-Cluster zu verbinden. Ich bevorzuge persönlich Wireguard wegen seiner Geschwindigkeit, seines schlanken Designs und seiner Stabilität. Es bietet eine schlanke und effiziente VPN-Lösung, die stets zuverlässige Leistung liefert.
Lassen Sie uns ein separates Netzwerk für Wireguard erstellen
docker network create wg_net
Dann benötigen wir ein Verzeichnis für die Konfiguration, das im Container eingehängt wird.
mkdir -p wg/config
chmod 777 -R wg/config
Dann können wir den Stack mit einigen Systemdiensten modifizieren, für die ich einen separaten Stack verwende. Die wichtigsten Eigenschaften:
SERVERURL=*.*.*.*
Sie sollten dies auf Ihre IP-Adresse oder Ihren Domainnamen ändernPEERS=1
Wenn Swarm den Container startet, erstellt Wireguard 1 Konfiguration für einen Peers und fügt sie in die Serverkonfiguration ein.
services:
Wireguard:
image: lscr.io/linuxserver/Wireguard:latest
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- SERVERURL=*.*.*.*
- SERVERPORT=51820
- PEERS=1
- PEERDNS=auto
- INTERNAL_SUBNET=10.11.11.0
- ALLOWEDIPS=0.0.0.0/0
- LOG_CONFS=true
volumes:
- $PWD/wg/config:/config
- /lib/modules:/lib/modules
networks:
- wg_net
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
deploy:
placement:
constraints: [node.role == manager]
networks:
wg_net:
external: true
Dann können wir den Stack über docker stack deploy --with-registry-auth -c system.yaml system
bereitstellen.
Nach dem Starten des Containers erstellt Wireguard die Peerkonfiguration bei wg/config/peer1
peer1.conf
ist unsere Wireguard-Client-Konfiguration.
Um das Wireguard-Netzwerk innerhalb des Clusters zu verwenden, müssen wir sein Netzwerk explizit zu jedem gewünschten Dienst hinzufügen. Zum Beispiel haben wir den montitoring.yaml
-Stack und möchten uns mit Prometheus verbinden.
services:
prometheus:
image: prom/prometheus:v2.55.1
networks:
- wg_net
Um sich mit Prometheus zu verbinden, können wir http://monitoring_prometheus:9090
verwenden.