Skip to content

Wireguard dans le cluster Swarm

Je pense toujours que docker Swarm est sous-estimé. Swarm est excellent pour des charges de travail simples, en particulier si vous construisez en local. Si vous utilisez Swarm sur un VPS, il est très utile de pouvoir se connecter au cluster Swarm depuis l'extérieur. Personnellement, je préfère Wireguard en raison de sa rapidité, de son design léger et de sa stabilité. Il offre une solution VPN rationalisée et efficace qui fournit constamment des performances fiables.

Créons un réseau séparé pour Wireguard

shell
docker network create wg_net

Ensuite, nous avons besoin d'un répertoire pour la configuration qui sera montée à l'intérieur du conteneur.

shell
mkdir -p wg/config
chmod 777 -R wg/config

Ensuite, nous pouvons modifier la pile avec certains services système que j'utilise dans une pile séparée. Les propriétés les plus importantes sont :

  • SERVERURL=*.*.*.* vous devez le changer pour votre adresse IP ou nom de domaine
  • PEERS=1 lorsque Swarm démarre le conteneur, Wireguard crée 1 configuration pour pair et l'ajoute dans la configuration du serveur.
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

Ensuite, nous pouvons déployer la pile via docker stack deploy --with-registry-auth -c system.yaml system

Après le démarrage du conteneur, Wireguard crée la configuration du pair dans wg/config/peer1img1

peer1.conf est notre configuration client Wireguard.

Pour utiliser le réseau Wireguard à l'intérieur du cluster, nous devons ajouter explicitement son réseau à tout service désiré, par exemple, nous avons une pile monitoring.yaml et nous voulons nous connecter à Prometheus.

yaml
services:
  prometheus:    
    image: prom/prometheus:v2.55.1
    networks:
      - wg_net

Pour se connecter à prometheus, nous pouvons utiliser http://monitoring_prometheus:9090