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

У меня есть несколько серверов. У каждого из них есть много проектов для создания докеров для 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. ) Используя сеть роя для работы с локальными контейнерами

, я создал сеть для своего mainproxy:

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

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

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

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

1
задан 3 December 2017 в 21:14
1 ответ

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

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

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

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

2
ответ дан 3 December 2019 в 20:17

Теги

Похожие вопросы