在 Swarm 集群中使用 Wireguard
我仍然认为 Docker Swarm 被低估了。Swarm 对于简单的工作负载非常出色,尤其是在构建本地部署时。如果你在 VPS 上使用 Swarm,能够从外部连接到 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 为对等端创建一个配置,并将其添加到服务器配置中。
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/peer1
创建对等端配置
peer1.conf
是我们的 Wireguard 客户端配置。
要在集群内使用 Wireguard 网络,我们需要显式将其网络添加到任何所需的服务中。例如,我们有 montitoring.yaml
堆栈,并且我们希望连接到 Prometheus。
yaml
services:
prometheus:
image: prom/prometheus:v2.55.1
networks:
- wg_net
要连接到 Prometheus,我们可以使用 http://monitoring_prometheus:9090