Eureka с AWS ECS

Мы используем Eureka с сервисом AWS ECS, который может масштабировать докер-контейнеры. В ECS, если вы не укажете порт хоста или укажете для него значение «0» в определении задачи, порт будет выбран автоматически и сообщен службе. После того, как задача запущена, ее описание должно показать, к каким портам она привязана.

Как Eureka может решить, какой порт использовать, если у нас несколько экземпляров EC2. Например, служба A из EC2-A попытается вызвать службу B из EC2-B. Таким образом, Eureka может разрешить имя хоста, но не может идентифицировать открытый порт.


person Aleksandr Filichkin    schedule 02.05.2017    source источник
comment
Итак, Eureka отлично работает с AWS ESC, если у нас есть статический порт Docker. Нам просто нужно открыть этот порт, тогда Eureka сможет разрешить хост AWS с помощью AmazonInfo (cloud.spring.io/spring-cloud-netflix/) Но Eureka не поможет вам, если вы хотите использовать функцию автоматического вызова ECS. Фактически, мы можем использовать Eureka с ECS (автозапуск) и Docker только с сетевым хостом Docker (docker run --net = host). Но такой подход не годится. Для Kubernetes это нормально, потому что каждый образ Docker изолирован в Pod   -  person Aleksandr Filichkin    schedule 03.05.2017


Ответы (3)


Привет @ Александр Филичкин!

Я не думаю, что Application Load Balancer и реестр служб делают то же самое. Основное различие: трафик проходит через балансировщик нагрузки (приложения), тогда как реестр служб просто дает вам работоспособную конечную точку, к которой ваш клиент может напрямую обращаться (поэтому сетевой трафик не проходит через реестр служб).

Дешево - термин относительный, может быть, для одних это дешево, для других - ненужные накладные расходы.

person unk    schedule 19.02.2019
comment
Вы можете добавить это как комментарий, а не как ответ. Пожалуйста, прочтите правила. - person dpapadopoulos; 19.02.2019
comment
Я бы хотел, но у меня недостаточно точки stackoverflow, чтобы прокомментировать чей-то ответ. - person unk; 20.02.2019

Проблема решена https://github.com/Netflix/eureka/issues/937

В настоящий момент агент ECS знает о запущенном порту.

Но я не рекомендую использовать Eureka с ECS, потому что Application Load Balancer делает то же самое. Он работает как реестр служб и обнаружение. Вам не нужно запускать дополнительный сервис (Eureka), ALB дешевый.

person Aleksandr Filichkin    schedule 26.04.2018
comment
Совершенно нормально не использовать эврику, но как насчет взаимодействия микросервисов? с eureka это очень просто, я могу просто использовать клиент Feign с именем службы. - person DV Singh; 02.12.2019

Есть другое решение.

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

Каждый контейнер докеров установил свое имя хоста на имя хоста балансировщика нагрузки. Если вам нужен красивый URL-адрес, вы можете использовать Route53 для DNS-маршрутизации.

Выглядит это так:

Обнаружение службы с помощью Loadbalancer-Hostname

Обнаружение службы с помощью Loadbalancer-Hostname

Последовательность запросов

поток запросов

Если у вас есть два контейнера с одной и той же задачей на разных хостах, оба будут передавать одно и то же имя хоста loadbalancer в eureka.

С помощью этого решения вы можете использовать eureka с докером на AWS ECS, не теряя при этом преимуществ и гибкости динамического сопоставления портов.

person Si Tran    schedule 29.06.2017