首页 > 解决方案 > AWS:通过负载均衡器或服务中任务中指定的公共 IP 访问应用程序

问题描述

有一个启用了自动分配公共 IP 并配置为从任务定义运行任务的 ECS 服务 - 任务作为 Web 应用程序启动,并且可以通过公共 IP 访问。

如果我创建了完全相同的服务来从相同的任务定义启动任务,但使用 LoadBalancer - 任务也会启动并且应用程序成功启动,这也可以在 CloudWatch Logs 中看到,但我无法通过公共 IP 访问此应用程序正在运行的任务。

在 LoadBalancer 目标组中,任务已注册,但在健康检查不成功后,任务停止(在目标组中,它通过状态初始>不健康>耗尽)。我试图增加健康检查时间,以期完成任务。

此外,在服务使用的安全组中,在入站规则中添加:自定义 TCP 8080(作为我的应用程序在 8080 端口上侦听)用于安全组负载均衡器

问题是,如果服务是使用负载均衡器创建的,是否可以通过任务中指定的公共 IP 访问应用程序?我不明白为什么在没有 ELB 的服务中,应用程序可以通过任务的公共 IP 访问,而在没有 ELB 的情况下创建服务时它不可用。

而且,由于这个事实,任务通过健康检查停止,任务也不能通过 ELB 获得。

使用 ELB 创建服务时遵循此说明https://aws.amazon.com/premiumsupport/knowledge-center/create-alb-auto-register/

请推荐在哪个方向寻找解决方案。

标签: amazon-web-servicesamazon-ecsamazon-elbaws-load-balancer

解决方案


如果您有负载均衡器,那么您绝对不应该将任务公开为可访问的。它应该是私有的,并且如果可能的话,它的安全组只允许来自负载均衡器的访问。

如果任务未能通过健康检查,那么您可以通过检查目标组的目标选项卡来找出失败的原因:

  • 如果目标显示它由于超时而失败,这将是一个安全组问题。
  • 如果目标显示状态检查,这将是您的应用程序与运行状况检查预期的响应不匹配

推荐阅读