Использование Docker для предоставления услуг из домашней сети в Интернет

#docker #docker-swarm

Вопрос:

У меня небольшой VPS. У этого VPS мало ресурсов, поэтому я хочу расширить его с помощью небольшого серверного ПК, который у меня есть дома. Я хочу избежать пересылки каких-либо портов с моего маршрутизатора, потому что я не хочу открывать свою частную сеть в Интернет. Поэтому я хотел использовать Docker для создания контейнеров на моем домашнем сервере и подключения их к vps, чтобы они были доступны из Интернета. Я новичок в мире Докеров, так что, возможно, эти подходы неверны, но для меня они имели смысл.

Подход 1. Использование VPN-контейнера для подключения сетей. Я хотел запустить сервер Wireguard на VPS и клиент Wireguard на домашнем сервере. Проблема заключалась в том, что я запускаю Docker с WSL, и поэтому Wireguard не поддерживается. Я мог бы использовать OpenVPN, но это выглядело сложнее, поэтому я переключился на Подход 2.

Подход 2: Использование оверлейной сети. Это казалось правильным решением, но я не могу заставить его работать. Я создал рой и своего VPS в качестве его менеджера. Сначала я попытался подключить свой домашний сервер в качестве второго менеджера, но в нем говорилось, что некоторые функции rpc недоступны. Но в рабочем режиме он подключался без проблем. Я установил Portainer, и он также работает. Затем я создал стек, подобный этому:

     version: "3.2"

services:      
  nginx:
    image: nginx
    container_name: nginx
    restart: always
    deploy:
      placement:
        constraints:
          - "node.id==###homeserver nodeid###"    
    networks:
     - testnet
    ports:
      - target: 80
        published: 44444
        protocol: tcp
        mode: ingress

          
networks:
  testnet:
    driver: overlay
 

но я не могу подключиться через общедоступный ip-адрес и порт 44444. Также, когда я проверяю созданную сетевую тестовую сеть в portainer, подключенных контейнеров нет. Но если я загляну в сеть портейнера, там будет указан удаленный агент и хост. Я предполагаю, что проблема будет заключаться в следующем:

Open protocols and ports between the hosts

The following ports must be available. On some systems, these ports
are open by default.

 TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
 
  • Документация по рою

Поэтому мне нужно будет открыть эти порты на моем маршрутизаторе, и для этого я вернусь к началу..

Поэтому мои вопросы таковы:

  • Я что-то упускаю в своих подходах?
  • Если бы они были чепухой, как бы вы решили эту проблему?

Спасибо, Феликс