Skip to content

Wireguard em Cluster Swarm

Ainda sinto que o Docker Swarm é subestimado. Swarm é ótimo para cargas de trabalho simples, especialmente se você estiver construindo no local. Se você usa Swarm em VPS, é muito útil ter a possibilidade de se conectar ao cluster Swarm de fora. Eu pessoalmente prefiro o Wireguard por causa de sua velocidade, design leve e estabilidade. Ele oferece uma solução VPN eficiente e simplificada que constantemente entrega um desempenho confiável.

Vamos criar uma rede separada para o Wireguard:

shell
docker network create wg_net

Em seguida, precisamos de um diretório para configuração que será montado dentro do contêiner.

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

Depois, podemos modificar a stack com alguns serviços do sistema. Eu uso uma stack separada para isso. As propriedades mais importantes são:

  • SERVERURL=*.*.*.* você deve alterar isso para o seu endereço IP ou nome de domínio
  • PEERS=1 quando o Swarm inicia o contêiner, o Wireguard cria 1 configuração para o peer e a adiciona na configuração do servidor.
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

Podemos então implantar a stack com docker stack deploy --with-registry-auth -c system.yaml system

Após iniciar o contêiner, o Wireguard cria a configuração do peer em wg/config/peer1img1

peer1.conf é a nossa configuração de cliente do Wireguard.

Para usar a rede Wireguard dentro do cluster, precisamos adicionar sua rede explicitamente a qualquer serviço desejado, por exemplo, temos a stack monitoring.yaml, e queremos conectar ao Prometheus.

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

Para conectar ao Prometheus, podemos usar http://monitoring_prometheus:9090