Skip to content

在 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 创建对等端配置 img1

peer1.conf 是我们的 Wireguard 客户端配置。

要在集群内使用 Wireguard 网络,我们需要显式将其网络添加到任何所需的服务中。例如,我们有 montitoring.yaml 堆栈,并且我们希望连接到 Prometheus。

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

要连接到 Prometheus,我们可以使用 http://monitoring_prometheus:9090