提问人:Ondřej Moris 提问时间:11/14/2023 最后编辑:Ondřej Moris 更新时间:11/14/2023 访问量:47
为什么从 AWS ECS 发起的请求响应超时?
Why request's response initiated from AWS ECS is timing out?
问:
我有带有负载均衡器的 EC2 实例的 ECS。Internet 网关正在工作。所有这些都在公共子网中工作(我知道这是不对的,但这不是我问题的重点)。所有这些都是公共的(安全组等)。传入请求工作正常。当我尝试从 docker 容器内部发出请求时,收到了请求,但我没有得到任何响应。它就像响应挂起。我可以从 EC2 ping google,但不能从 docker 容器内部 ping google。docker 公开端口 80。我还应该提到,我不能直接连接到 EC2 公有 IP,但它可以从负载均衡器工作。
例如:我可以从浏览器连接到 EC2 中的应用程序,但是当我尝试从应用程序内部调用条带 API 时。Stripe 注册了更改,但我没有得到响应。
我试着允许一切和任何地方。编辑安全组、ACL、路由表中的规则。
实际状态:
- 默认情况下为 Acl(全部允许)
- 网络模式 AWSVPC
- 安全组 - 允许所有安全组
- 公有子网
答:
0赞
Mark B
11/14/2023
#1
由于您使用的是网络模式,因此 ECS 任务会从运行它们的 EC2 服务器获得单独的弹性网络接口 (ENI)。这意味着 ECS 任务不共享 EC2 实例的任何网络连接,并且它们需要为其 ENI 分配一个公有 IP,以便它们能够使用部署到的公有子网中的 Internet 网关路由。awsvpc
遗憾的是,在 EC2 上运行的 ECS 任务不允许您分配公有 IPv4 地址。您的选择包括:
- 将您的网络模式切换为 mode,这将允许您的 ECS 任务使用 EC2 实例的网络连接,该网络连接分配了一个公有 IP 地址,因此可以访问 VPC 外部的内容。
host
- 在您的 VPC 上启用 IPv6 双堆栈模式,添加一个仅出口 Internet 网关,此时您的 ECS 任务应具有可公开路由的 IPv6 地址,并且能够访问 VPC 外部的内容。
- 在公有子网中创建 NAT 网关。将您的 ECS 集群移动到具有该 NAT 网关路由的私有子网中。然后,您的 ECS 任务将能够通过 NAT 网关发送流量以访问 VPC 外部的内容。
- 切换到在 Fargate 上部署任务,而不是在 EC2 上部署任务,后者允许您将公有 IPv4 地址分配给 ECS 任务。
评论