Я пытаюсь разместить службу на Fargate, которая предоставляет TCP-порт. Даже этот простой пример, демонстрирующий HTTP на порту 80, никогда не станет работоспособным на Fargate.
var loadBalancedFargateService = NetworkLoadBalancedFargateService.Builder.create(this, "ServiceSample")
.cluster(fargateCluster)
.publicLoadBalancer(true)
.memoryLimitMiB(1024)
.cpu(512)
.listenerPort(80)
.taskImageOptions(NetworkLoadBalancedTaskImageOptions.builder()
.image(ContainerImage.fromRegistry("amazon/amazon-ecs-sample"))
.containerPort(80)
.build())
.build();
Ошибка, которую я получаю:
service dev-shopapi-redis-ServiceSampleService16E525F0-ASe7w3oUlGf9 port 80 is unhealthy in target-group dev-sh-Servi-EFOUJ7LG0YPP due to (reason Health checks failed).
Я намерен предоставить другую службу с протоколом TCP, и это упрощенная версия, которая предоставляет HTTP.
Что я делаю неправильно?
Вы, вероятно, правы: «Если ваш контейнер сопоставлен с портом 80, убедитесь, что ваша группа безопасности контейнера разрешает входящий трафик через порт 80 для балансировщика нагрузки».
Попробуйте выполнить следующие действия по устранению неполадок:
- Если ваш контейнер сопоставлен с портом 80, убедитесь, что ваша группа безопасности контейнера разрешает входящий трафик через порт 80 для балансировщик нагрузки.
- Убедитесь, что значение порта ping для работоспособности балансировщика нагрузки настроено правильно. Если этот порт настроен неправильно, то ваш балансировщик нагрузки может отменить регистрацию контейнера у самого себя.
- Определите минимальный льготный период проверки работоспособности. Это указывает планировщику службы игнорировать эластичную балансировку нагрузки. проверки работоспособности в течение заранее определенного периода времени после того, как задача была создан.
- Отслеживайте показатели ЦП и памяти службы. Например, высокая загрузка ЦП может привести к тому, что ваше приложение не будет отвечать на запросы, что приведет к ошибке 502. ошибка.
- Проверьте журналы приложений на наличие ошибок приложений.
- Проверьте, правильно ли настроены порт ping и путь проверки работоспособности.
В отличие от ApplicationLoadBalancedFargateService
, NetworkLoadBalancedFargateService
не настраивает порт контейнера автоматически.
Поэтому просто добавьте в CDK следующее:
loadBalancedEcsService.getService().getConnections().allowFromAnyIpv4( Port.tcp(80) );//80 since the container is listening on port 80
Источник: https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-health-check-failures/
Вы пробовали это: aws.amazon.com/premiumsupport/knowledge-center/…