为什么AWS ECS发起的请求响应超时?

问题描述 投票:0回答:1

我有 ECS 和带负载均衡器的 EC2 实例。互联网网关正在工作。所有这些都在公共子网中工作(我知道这是不对的,但这不是我的问题的重点)。所有这些都是公共的(安全团体等)。传入的请求工作正常。当我尝试从 docker 容器内部发出请求时,收到了请求,但没有得到任何响应。就像响应挂起一样。我可以从 EC2 ping google,但不能从 docker 容器内部 ping 通。 docker 暴露了端口 80。我还应该提到,我无法直接连接到 EC2 公共 IP,但它可以通过负载均衡器工作。

例如:我可以从浏览器连接到 EC2 中的应用程序,但是当我尝试从应用程序内部调用 stripe API 时。 Stripe 注册了更改,但我没有得到响应。

我试图允许一切、无处不在。编辑安全组、ACL、路由表中的规则。

实际状态:

  • Acl 默认(允许全部)
  • 网络模式 awsvpc
  • 安全组 - 允许所有
  • 公共子网
amazon-web-services docker amazon-ec2 amazon-ecs
1个回答
0
投票

由于您使用的是网络模式

awsvpc
,ECS 任务会从其运行的 EC2 服务器获取单独的弹性网络接口 (ENI)。这意味着 ECS 任务不共享 EC2 实例的任何网络连接,并且它们需要分配给其 ENI 的公共 IP,以便它们能够在部署到的公共子网中使用 Internet 网关路由。

不幸的是,在 EC2 上运行的 ECS 任务不允许您分配公共 IPv4 地址。您的选择是:

  • 将您的网络模式切换到
    host
    模式,这将允许您的 ECS 任务使用 EC2 实例的网络连接,该实例分配有公共 IP 地址,因此可以访问 VPC 之外的内容。
  • 在您的 VPC 上启用 IPv6 双栈模式,添加仅出口互联网网关,此时您的 ECS 任务应该具有可公开路由的 IPv6 地址,并能够访问 VPC 外部的内容。
  • 在公有子网中创建 NAT 网关。将您的 ECS 集群移动到具有该 NAT 网关路由的私有子网中。然后,您的 ECS 任务将能够通过 NAT 网关发送流量以访问 VPC 外部的内容。
  • 切换到在 Fargate 而不是 EC2 上部署任务,后者允许您将公共 IPv4 地址分配给 ECS 任务。
© www.soinside.com 2019 - 2024. All rights reserved.