aws ECS, экземпляр ECS не зарегистрирован в целевой группе ALB - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю службу ECS, и она запускает 1 экземпляр ecs, и я вижу, что экземпляр зарегистрирован в качестве цели балансировщика нагрузки.

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

Экземпляр запускается и добавляется в кластер ECS.(Я вижу это на вкладке экземпляров ECS) Но экземпляр не добавляется к цели ALB.(Я ожидаю увидеть 2 экземпляра на следующем изображении, но вижу только 1)

s

Я могу редактировать целевую группу AutoScalingGroup, как показано ниже

enter image description here

Тогда я вижу следующее.

enter image description here

Но проверка работоспособности не пройдена.Кажется, порт 80 недоступен.Хотя у меня порт 80 открыт для общего доступа в группе безопасности для экземпляра.(Кроме того, экземпляр, созданный из службы ecs, использует динамическое сопоставление портов, но экземпляр, созданный ALS, этого не делает)

Таким образом, AutoScalingGroup может запустить новый экземпляр, но мой балансировщик нагрузки никогда не передает трафик новому экземпляру.

Я попробовал https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-unhealthy-checks-ecs/?nc1=h_ls, и это показывает, что я могу подключиться к порту 80 от хоста к контейнеру док-станции с помощью чего-то вроде curl -v http://${IPADDR}/health.

Так что это должно быть такчто-то не так с портом хоста 80 (балансировщик нагрузки не может подключиться к нему).Но это также тот случай, когда настройка группы безопасности не является неправильной, потому что рабочий экземпляр и этот нерабочий экземпляр используют один и тот же SG.

  • Edit

Потому что яиспользуется динамическое отображение, мой веб-сервер работает на каком-то случайном порту.Как видите, экземпляр, запущенный службой ecs, зарегистрировался в целевой группе с произвольным портом.
Однако экземпляр, запущенный ALB, зарегистрировался в целевой группе с портом 80.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Экземпляр не будет добавлен в целевую группу, если он не исправен.Поэтому вам нужно сначала исправить проверку работоспособности.

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

Когда вы свернете конечную точку IP curl -I -v http://${IPADDR}/health., код состояния HTTP был 200, если он равен 200, тогда он должен быть исправен, если он не 200, тогдаобновите внутренний http-код состояния или вы можете обновить код состояния HTTP для проверки работоспособности.

Я предполагаю, что вы также запускаете ECS в обоих случаях, поэтому ECS создает целевую группу для каждой службы ECS, выполняете ли вы какую-то смесь?Услуги, что вам нужна целевая группа в группе AS?если вы используете динамический порт, то удалите путь проверки работоспособности к порту трафика.

Теперь, если мы посмотрим на возможные возможные причины неисправного шлюза 502

Динамическое сопоставление портов является функциейэкземпляр контейнера в Amazon Elastic Container Service (Amazon ECS)

Динамическое сопоставление портов с помощью Application Load Balancer облегчает запуск нескольких задач в одной службе Amazon ECS в кластере Amazon ECS.

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

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

dynamic-port-mapping-ecs

HTTP 502: неверный шлюз Возможные причины:

  • Балансировщик нагрузки получил TCP RST от цели при попытке установить соединение.

  • Балансировщик нагрузки получил неожиданный ответ от цели, такой как "ICMP Destination unreachable (Host unreachable) ", при попытке установить соединение.Проверьте, разрешен ли трафик от подсетей балансировки нагрузки к целевым объектам на целевом порту.

  • Цель закрыла соединение с TCP RST или TCP FIN, в то время как балансировщик нагрузки имел невыполненныезапрос к цели.Проверьте, не короче ли продолжительность действия поддержки цели, чем значение времени ожидания простоя балансировщика нагрузки.

  • Целевой ответ искажен или содержит недопустимые заголовки HTTP.

  • Балансировщик нагрузки обнаружил ошибку квитирования SSL или тайм-аут квитирования SSL (10 секунд) при подключении к цели.

  • Период задержки отмены регистрации истек длязапрос обрабатывается целью, которая была отменена.Увеличьте период задержки, чтобы длительные операции могли завершиться. http-502-Issues

0 голосов
/ 24 сентября 2019

Кажется, вы знаете основную причину, которая заключается в том, что порт 80 не проходит проверку работоспособности, и поэтому он никогда не добавляется в ALB.Вот что вы можете попробовать

Сначала убедитесь, что ваша служба прослушивает порт 80 на новом хосте.Вы можете использовать команду вроде netcat

nv -v localhost 80

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

...