Skip to content

Wireguard в Swarm кластере

Мне все еще кажется, что docker Swarm недооценен. Swarm отлично подходит для выполнения простых задач, особенно если вы работаете на собственной инфраструктуре. Если вы используете Swarm на VPS, то очень удобно иметь возможность подключиться к Swarm кластеру извне. Я лично предпочитаю Wireguard из-за его скорости, легковесного дизайна и стабильности. Это оптимизированное и эффективное VPN решение, которое обеспечивает надежную работу.

Давайте создадим отдельную сеть для Wireguard

shell
docker network create wg_net

Затем нам нужна папка для конфигурации, которая будет смонтирована внутри контейнера.

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

Затем мы можем изменить стек некоторыми системными сервисами, я использую отдельный стек для этого. Самые важные свойства:

  • SERVERURL=*.*.*.* вы должны заменить это на ваш IP адрес или доменное имя
  • PEERS=1 при старте контейнера Swarm Wireguard создает 1 конфигурацию для клиента и добавляет его в конфигурацию сервера.
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

Затем мы можем развернуть стек через docker stack deploy --with-registry-auth -c system.yaml system

После запуска контейнера Wireguard создаст конфигурацию клиента в wg/config/peer1img1

peer1.conf — это наша конфигурация клиента Wireguard.

Чтобы использовать сеть Wireguard внутри кластера, нам нужно явно добавить ее к любому нужному сервису, например, у нас есть стек monitoring.yaml, и мы хотим подключиться к Prometheus.

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

Для подключения к prometheus мы можем использовать http://monitoring_prometheus:9090