Skip to content

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

shell
docker network create wg_net

Dann benötigen wir ein Verzeichnis für die Konfiguration, das im Container eingehängt wird.

shell
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 ändern
  • PEERS=1 Wenn Swarm den Container startet, erstellt Wireguard 1 Konfiguration für einen Peers und fügt sie in die Serverkonfiguration ein.
yaml
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/peer1img1

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.

yaml
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.