Стек Docker выставлен на публичный ip по имени хоста

Я пытаюсь настроить стек докера для одновременного запуска некоторых приложений. Он будет развернут для нескольких клиентов на одном компьютере, и он немного сложен - 3 службы API и два веб-сайта.

Я хотел бы создать стек для каждого клиента, чтобы ограничить накладные расходы, необходимые для настройки этого приложения для нового клиента - благодаря стеку я могу одновременно запускать эти API-интерфейсы и веб-сайты, предоставляя переменные среды.

Моя производственная машина имеет только один публичный IP. У меня есть докер с установленным режимом роя (необходимо использовать стеки). Однако мой рой - всего лишь одна машина, и я думаю, что так будет долго - мне просто не нужно больше ресурсов.

Упрощенный составной файл (всего с 2 сервисами) выглядит так:

version: "3.2"
services:
  auth_api:
    image: my-registry/auth-api:latest
    stdin_open: true
    tty: true
    ports:
      - 8010:80
    deploy:
      mode: global
    environment:
      - some_var
    volumes:
      - /var/my-app/${INSTANCE_NAME}:/store
    secrets:
      - auth_certificate

  office_web:
    image: my-registry/office-web:latest
    stdin_open: true
    tty: true
    ports:
      - 8012:80
    deploy:
      mode: global

secrets:
  auth_certificate:
    external:
      name: ${INSTANCE_NAME}-auth-identity-certificate

Этот стек создан, и мои приложения доступны на серверах общего IP с портами 8080 и 8081, что является нежелательным поведением.

Предполагая, что: мой веб-сервер имеет один публичный IP: A.B.C.DЯ настроил DNS для указания двух поддоменов на мой веб-сервер:

A.B.C.D api.example.com

A.B.C.D web.example.com

Я хочу настроить весь стек и веб-сервер следующим образом:

  • служба auth_api доступна для публичного IP-адреса через порт 80 только с настройкой имени хоста api.example.com
  • служба office_web доступна для общедоступного IP-адреса через порт 80 только при настройке имени хоста web.example.com
  • обе службы НЕ доступны по общедоступным IP-адресам через опубликованные порты - 8080,8081
  • когда я создаю новый стек для нового клиента, я не хочу "что-то" (обратный прокси-сервер?) автоматически заполнять новые публичные привязки имени хоста; Я могу предоставить их в качестве переменных label /env при создании стека, но я не хочу вручную редактировать что-то еще, кроме моего файла compose yaml

Как мне этого добиться? Без режима роя и стеков я использовал jwilder/nginx-proxy, который прекрасно работает, но стеки (режим роя) не поддерживаются этим замечательным образом докера.

Я не знаю, с чего начать, в "режиме без роя" я могу использовать конфигурацию портов в формате 127.0.0.1:8080:80, и мои контейнеры не были доступны по общедоступным IP-адресам. Я использовал jwilder/nginx-proxy, который автоматически заполняет IP-адрес контейнера и привязывает к нему публичный IP-адрес, используя имя хоста, передаваемое в качестве переменной env.

Как я могу добиться чего-то подобного?

0 ответов

Другие вопросы по тегам