amazon-web-services - 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/
请推荐在哪个方向寻找解决方案。
解决方案
如果您有负载均衡器,那么您绝对不应该将任务公开为可访问的。它应该是私有的,并且如果可能的话,它的安全组只允许来自负载均衡器的访问。
如果任务未能通过健康检查,那么您可以通过检查目标组的目标选项卡来找出失败的原因:
- 如果目标显示它由于超时而失败,这将是一个安全组问题。
- 如果目标显示状态检查,这将是您的应用程序与运行状况检查预期的响应不匹配
推荐阅读
- flutter - Flutter App builder 多次调用自身
- python - 在python中的特定行中写入的响应方式?
- python - Python的迭代器解包(star unpacking)是如何实现的(或者说,自定义迭代器的解包涉及哪些神奇的方法?)
- stripe-payments - 如何通过 Stripe 付款集成添加稍后付款选项?
- javascript - 如何在 saml2-js 中指定私钥的密码?
- c - 书库,结构和malloc
- visual-studio-code - 编辑 VS 代码 editor.wordSeparator 设置,当我删除整个单词时,在第一个大写字母后停止(例如 capLocks ---> cap)
- c# - 重写 ValidationAttribute ErrorMessage,从字符串到新的 ErrorModel 类
- dictionary - ansible 映射一个属性
- python - 通过两个 1 维制作 2 维数组