5

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

После некоторого исследования я столкнулся с режимом рой докеров, который позволяет обнаружить сервис. Кроме того, я столкнулся с другими инструментами для обнаружения сервисов, такими как Eureka и Consul.

Моя основная цель - заменить IP-адреса в curl call с именем службы и балансом нагрузки между несколькими экземплярами одного и того же сервиса.

i.e. ex. curl http://192.168.0.11:8080/ to curl http://my-service

Я должен поддерживать независимость своих услуг.

Пожалуйста, предлагайте, нужно ли использовать Консул с роумом докеров для обнаружения службы, или я могу сделать это без Консула? Каковы преимущества?

+0

Вы также можете использовать Etcd или Zookeeper. –

ответ

5

С новым «режимом роя» вы можете использовать докер services для создания кластеризованных служб через несколько узлов рой. Затем вы можете получить доступ к тем же сервисам, сбалансированным по нагрузке, используя имя службы, а не имя узла в ваших запросах.

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

С другой стороны, если вы хотите, чтобы иметь возможность открыть для себя услуг от систем за пределами рои, у вас есть несколько вариантов:

  • Для лиц без услуг, вы можете использовать докер-х routing mesh, что сделает сервисный порт доступен для всех узлов роя. Таким образом, вы можете просто указать на какой-либо узел в рое, и докер направит ваш запрос на узел, на котором запущена служба (независимо от того, имеет ли узел, на который вы попали, сервис или нет).
  • Используйте фактический балансировщик нагрузки перед вашими услугами рой, если вам нужно контролировать маршрутизацию или иметь дело с разными состояниями. Это может быть либо другая докерная служба (т. Е. Haproxy, nginx), запущенная с опцией --mode global, чтобы обеспечить ее выполнение на всех узлах или отдельный балансировщик нагрузки, такой как citrix netscaler. Вам понадобится, чтобы ваши контейнеры обслуживания перенастраивали LB через их сценарии запуска или с помощью средств инициализации (или добавляли их вручную).
  • Используйте что-то вроде консула для обнаружения внешних сервисов. Возможно, в сочетании с registrator для автоматического добавления сервисов. В этом сценарии вы просто настраиваете внешних клиентов для использования сервера/кластера consul для разрешения DNS (или использования API).

Вы, конечно же, можете просто перемещать своих потребителей услуг в рой. Если вы отделяете клиентов от служб в разных физических VLAN (или VPC и т. Д.), Вам нужно будет запустить клиентские контейнеры в отдельных оверлейных сетях, чтобы гарантировать, что вы не сможете эффективно уничтожить какую-либо сегрегацию физической сети уже на месте.

+0

Спасибо @Jon. Я попытаюсь открыть сервис «Swarm Mode». – prranay

0

Служба обнаружения (через dns) встроена в докер с версии 1.12. Когда вы создаете пользовательскую сеть (например, мост или наложение, если у вас несколько хостов), вы можете просто использовать контейнеры друг с другом по имени, если они являются частью одной сети. Вы также можете иметь псевдоним для каждого контейнера, который будет крутить список контейнеров, имеющих один и тот же псевдоним.Для простого примера см:

https://linuxctl.com/docker-networking-options-bridge

0

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

Вам нужно будет получить помощь от других инструментов, как только ваша инфраструктура начнет охватывать несколько серверов и микросервисов, распределенных на них.

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