Как работают сетевые устройства и балансировка нагрузки в режиме роуминга докеров?

Я новичок в докерах и контейнерах. Я просматривал учебники для докера и наткнулся на эту информацию. https://docs.docker.com/get-started/part3/#docker-composeyml

   networks:
     - webnet
networks:
  webnet:

Что такое вебнет? В документе говорится

Поручите веб-контейнерам использовать общий порт 80 через сеть с балансировкой нагрузки, которая называется webnet. (Внутри сами контейнеры будут публиковать данные на порт 80 сети в эфемерном порту.)

Итак, по умолчанию, оверлейная сеть сбалансирована по нагрузке в докерном кластере? Что используется алгоритм балансировки нагрузки?

На самом деле, мне не ясно, почему у нас есть балансировка нагрузки в оверлейной сети.

Ответ 1

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

Во-первых, документ, который вы здесь используете, использует то, что называется swarm mode докеры.

Что такое swarm mode?

Рой - это кластер двигателей Docker или узлов, где вы развертываете службы. CLI и API-интерфейс Docker Engine включают команды для управления узлами роя (например, добавления или удаления узлов), а также развертывания и организации служб через рой.

От SO Документация:

Рой - это ряд двигателей докеров (или узлов), которые совместно развертывают службы. Рой используется для распределения обработки по многим физическим, виртуальным или облачным машинам.

Итак, с режимом роя у вас есть много хост (vms и/или физический) кластер, машины, которые общаются друг с другом через docker engine.

Q1. Что такое веб-сайт?

webnet - это имя оверлейная сеть, которая создается при запуске вашего стека.

Оверлейные сети управляют связью между демонами Докера, участвующими в рое

В вашем кластере машин создается виртуальная сеть, в которой каждая служба имеет ip-карту на внутреннюю запись DNS (которая является именем службы) и позволяет докеру маршрутизировать входящие пакеты в нужный контейнер, всюду в рой (кластер).

Q2. Итак, по умолчанию, наложенная сеть сбалансирована по нагрузке в кластере докеров?

Да, если вы используете оверлейную сеть, но вы также можете удалить конфигурацию службы networks, чтобы обойти это. Затем вы должны publish порт службы, которую хотите открыть.

Q3. Что такое алгоритм балансировки нагрузки?

Из этого SO вопрос ответил мастер роя bmitch;):

Алгоритм в настоящее время цикличен, и я не видел никаких признаков того, что он еще не подключен. Балансировщик уровня более высокого уровня позволял снимать узлы роя для обслуживания, но любые липкие сеансы или другие функции маршрутизации будут отменены алгоритмом round-robin в режиме роя.

Q4. На самом деле мне непонятно, почему у нас есть балансировка нагрузки на оверлейной сети.

Цель режима/сервисов роуминга-докеров заключается в том, чтобы разрешить организацию реплицированных сервисов, что означает, что мы можем масштабировать вверх/вниз контейнеры, развернутые в рое.

В docs:

Режим Swarm имеет внутренний компонент DNS, который автоматически присваивает каждой службе в рое запись DNS. Менеджер роя использует внутреннюю балансировку нагрузки для распределения запросов между службами в кластере на основе DNS-имени службы.

Итак, вы можете развернуть как 10 точных контейнеров (скажем, nginx с вами app html/js), не имея дело с записями DNS в частной сети, конфигурацией портов и т.д. Любой входящий запрос будет автоматически загружаться на хосты участвуя в рое.

Надеюсь, это поможет!