У меня есть кластер ECS Fargate, который я настроил после чтения инструкций в другом посте StackOverFlow . У меня есть несколько контейнеров, которые я вставил в репозитории ECR и могу успешно запускать контейнеры. Но переход к http://PUBLIC-IP-ADDRESS не дает доступа к службе, предоставляемой контейнером.
В моем последнем тесте я просто использовал контейнер httpd из Docker Hub потому что это просто и предоставляет веб-страницу по умолчанию. Все еще не повезло.
VP C имеет две подсети - publi c и private - и был сконструирован в соответствии с инструкциями в посте, приведенном выше. Я присоединяю контейнеры - в качестве службы ECS - к публикации c su bnet, а также настраиваю службу, чтобы сделать ее общедоступным c IP-адресом.
Publi c su bnet (CIDR 10.0.1.0/24) имеет следующую таблицу маршрутов:
10.0.0.0/16 local
0.0.0.0/0 igw-0ad0671cc2924857e
Правила входящих сетевых ACL
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
Правила исходящих сетевых ACL
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
(Это правила по умолчанию)
Приватный su bnet (CIDR 10.0.2.0/24) имеет ту же конфигурацию, но вместо этого таблица маршрутизации подключается к шлюзу NAT. Шлюз NAT размещен в publi c net.
Единственное, что я сделал в отличие от инструкций по конфигурации VP C, - это группа безопасности. При создании служб я настраиваю службу с группой безопасности по умолчанию , поставляемой с VP C. Эта группа безопасности разрешает весь трафик c как входящий, так и исходящий.
Для определения задачи - я создал httpd TD, используя сетевой режим awsvp c (это Fargate ECS) , 1/2 ГБ памяти, 0,25 vCPU, открывающий порт 80 на контейнере,
Для Службы я подключил его к VP C, дал ему имя httpd , прикрепил это к publi c su bnet и сказал, что использует publi c IP-адрес.
Служба и содержащаяся в ней Задача запускаются правильно, и Задача показывает publi c IP-адрес , Доступ к этому IP-адресу приводит к долгому ожиданию, и в конечном итоге веб-браузер сдается. (время ожидания)
ОБНОВЛЕНИЕ -
Я не знал о необходимости иметь балансировщик нагрузки. Я попытался добавить балансировщик нагрузки. Но это не имело значения.
Чтобы добавить балансировщик нагрузки, необходимо добавить дополнительные подсети publi c, настроенные, как указано выше. Балансировщик нагрузки приложения подключен к подсетям VP C и publi c. Он прослушивает HTTP (порт 80).
Затем я заново создал службу для контейнера httpd . Во время создания сервиса я сделал все возможное, чтобы настроить его для балансировки нагрузки, а затем описание сервиса дает следующую сводку:
Target Group Name Container Name Container Port
ecs-ecs-go-httpd httpd 80