Назад | Перейти на главную страницу

Использование Docker Swarm для построения сети обратного прокси

У меня несколько серверов. У каждого из них есть много проектов docker-compose для проектов HTTPS, которые используют один обратный прокси-сервер с автоматическим обнаружением для HTTPS.

Несколько дней назад я обнаружил на YouTube, что роя полностью прост в настройке и дает мне множество возможностей перемещать контейнеры между этими машинами без значительных простоев.

Теперь о двух моих проблемах:

1.) Синхронизация конфигов и сертификатов letsencrypt

Я создал конфигурацию:

version: '3.2'

services:
  nginx:
    image: myFancyImage
    networks:
      - web
    restart: always
    deploy:
      mode: global
    ports:
      - target: 80
        published: 81 # for testing
        protocol: tcp
        mode: ingress
      - target: 443
        published: 444 # for testing
        protocol: tcp
        mode: ingress
    volumes:
      - mainnginx-www:/var/www
      - mainnginx-letsencrypt:/etc/letsencrypt
      - mainnginx-sites-enabled:/etc/nginx/sites-enabled/

volumes:
  mainnginx-www:
  mainnginx-letsencrypt:
  mainnginx-sites-enabled:

networks:
  web:
    external:
      name: web1

И развернул сервис через:

docker stack deploy --compose-file docker-compose.yml mainnginx

Теперь на обоих машинах экземпляр моего обратного прокси-сервера запустил и смонтировал три тома, но они только локальные, а не общие.

Конечно, я могу использовать NFS для их синхронизации, но что здесь лучше всего? NFS выглядит нечистым. Я где-то читал, что докер монтируется из диспетчера, но этого не происходит ...

Как ты это решил?

2.) Использование роевой сети для работы с локальными контейнерами

Я создал сеть для своего основного прокси:

docker network create --opt encrypted --attachable --driver overlay web1

и добавил один из моих локальных проектов с server1 в сеть, как показано в презентации.

Затем я попытался подключиться с моего обратного прокси server1 и с моего обратного прокси server2 для проверки связи с контейнером моих проектов и смог сделать это только с server1. Server2 обнаружил правильный IP-адрес, но ни ping, ни ponging не выполнял. Он просто ждал.

Что я сделал не так? Разве это не была идея?

Связано с вашей первой проблемой. Хотя Swarm действительно прост в настройке и позволяет создавать копии ваших контейнеров и многое другое, разделение объема не входит в комплект поставки Swarm. Вы правы, в диспетчере тома не монтируются. Каждый контейнер будет монтировать том на каждом рабочем хосте, на котором он работает, и эти тома не используются в Swarm.

Вам следует ознакомиться с документацией Docker о подключаемых модулях тома. Из документов, «плагин тома может позволить томам Docker сохраняться на нескольких хостах Docker». Поэтому, если в вашем случае вы хотите использовать одни и те же тома между хостами роя, вам нужно выбрать плагин тома, который лучше всего подходит для вашей среды, выбрав плагин из список.

Альтернативой плагинам тома, как вы упомянули, может быть, конечно, совместное использование данных с NFS, GlusterFS или Ceph, где рабочие узлы в Swarm должны совместно использовать точку монтирования тома. Я рекомендую вам прочитать это статья о постоянстве тома и совместном использовании тома, хотя он датирован и не связан напрямую с роем, он содержит ценную информацию и говорит о двух упомянутых стратегиях: плагине тома и совместном использовании данных. Обратите внимание, что в статье упоминается Flocker, но Flocker был прекращен, хотя здесь он был разветвлен. https://github.com/ScatterHQ/flocker). Поскольку ServerFault не основан на мнениях, я не включаю свои предпочтения, я просто упоминаю существующие стратегии решения вашей проблемы.

О твоей второй проблеме. Swarm действительно позволяет связывать контейнеры, расположенные на разных рабочих хостах, благодаря наложенной сети. Я использую балансировщики нагрузки и обратный прокси, которые безупречно соединяются с другими контейнерами. Вы создаете сеть в одном из ваших менеджеров Swarm, и ваши рабочие хосты будут изменены, поэтому будет создана такая же сеть и будут применяться правила брандмауэра. Если у вас возникли проблемы, я рекомендую вам следовать Рой учебник чтобы вы могли увидеть, как он работает, или обнаружить проблему в вашей настройке. Использую для устранения неполадок.