Wireguard en un clúster Swarm
Aún siento que Docker Swarm está subestimado. Swarm es excelente para cargas de trabajo simples, especialmente si estás construyendo en instalaciones locales. Si usas Swarm en un VPS, es muy útil tener la posibilidad de conectarse al clúster Swarm desde el exterior. Personalmente, prefiero Wireguard por su velocidad, diseño liviano y estabilidad. Ofrece una solución VPN optimizada y eficiente que constantemente brinda un desempeño confiable.
Vamos a crear una red separada para Wireguard
docker network create wg_net
Luego necesitamos un directorio para la configuración que se montará dentro del contenedor.
mkdir -p wg/config
chmod 777 -R wg/config
Luego podemos modificar el stack con algunos servicios del sistema; uso un stack separado para esto. Las propiedades más importantes son:
SERVERURL=*.*.*.*
deberías cambiarlo por tu dirección IP o nombre de dominio.PEERS=1
cuando Swarm inicia el contenedor, Wireguard crea 1 configuración para el peer y lo agrega en la configuración del servidor.
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
Luego podemos desplegar el stack mediante docker stack deploy --with-registry-auth -c system.yaml system
Después de iniciar el contenedor, Wireguard crea la configuración de peer en wg/config/peer1
peer1.conf
es nuestra configuración de cliente Wireguard.
Para usar la red de Wireguard dentro del clúster, necesitamos añadir explícitamente su red a cualquier servicio deseado. Por ejemplo, tenemos un stack montioring.yaml
y queremos conectarnos a Prometheus.
services:
prometheus:
image: prom/prometheus:v2.55.1
networks:
- wg_net
Para conectarse a Prometheus podemos usar http://monitoring_prometheus:9090