AWS ECS Fargate任务需要静态出站IP地址

38
我有一个包含服务的Docker容器,我想通过AWS ECS和Fargate运行它。不幸的是,我想要运行的服务需要访问合作伙伴的SFTP服务器,其中IP地址需要在白名单中设置。
我的问题是:如何将静态IPv4地址分配给AWS ECS Fargate任务?我已经设置了VPC、子网、互联网和NAT网关,并相互分配了它们。但我看到最大的问题是,对于每个使用Fargate执行的任务,都会分配一个具有不同IP的新ENI。
希望能得到一些帮助! :)

2
FYI:这里有一篇非常好的博客文章,详细介绍了如何使用NAT网关创建静态IP地址:https://medium.com/@gboyegadada/aws-how-to-create-a-static-ip-address-using-a-nat-gateway-845c884aa4bd - JohnLBevan
1
John的评论是这个问题的答案 - 使用NAT网关。 - nickolay.laptev
4个回答

7

我亲测有效的方法如下:

  1. 创建一个子网,用于运行 ECS 任务
  2. 在该子网中添加 NAT 网关(可以是只有出口的)
  3. 为 NAT 网关分配一个弹性 IP
  4. 观察 ECS 任务的外部 IP 是否为 NAT 网关的弹性 IP

1
AWS的指示:https://repost.aws/knowledge-center/nat-gateway-vpc-private-subnet - grantr

3
我们目前遇到了相同的问题,我们找到的解决方案是将整个子网CIDR(例如10.11.12.13/24)列入白名单,这样可以正常工作,但我们仍然觉得不安全。
我发现一个响应建议使用NAT网关来转换您的容器IP地址。这里是与Lambda使用情况的链接,还需要测试Fargate。

1
子网CIDR是私有IP,而不是从外部看到的像SFTP服务器那样的IP,所以我不知道它怎么能工作。 - sechstein
我假设ECS Fargate想要通过VPN或直接连接访问SFTP服务器,在这种情况下,私有IP可以正常工作。如果OP想要将静态输出公共IP列入白名单,他只需要将NAT网关IP列入白名单,我之前已经完成并测试过了。 - Diego T. P.

0

您无法直接向 Fargate 任务 添加静态 IP 地址或弹性 IP 地址。

要在 Fargate 任务中使用静态 IP 或弹性 IP,请执行以下操作:

  1. 创建带有网络负载均衡器的 Fargate 服务。
  2. 将任务的弹性 IP 地址附加到负载均衡器上。

创建网络负载均衡器,然后为目标组配置路由

  1. 打开Amazon EC2控制台。
  2. 在导航窗格中,选择负载平衡,然后选择负载均衡器。
  3. 选择创建负载均衡器。
  4. 在选择负载均衡器类型页面上,选择为网络负载均衡器创建。
  5. 在创建网络负载均衡器页面上,为负载均衡器名称输入一个名称。
  6. 对于方案,请选择Internet-facing或internal。
  7. 对于IP地址类型,请选择IPv4。
  8. 在网络映射部分中,对于VPC,请选择您的Fargate任务的Amazon Virtual Private Cloud(Amazon VPC)。
  9. 对于Mappings,请为每个可用区选择至少一个可用区和一个子网。
  10. 在侦听器和路由部分中,保留默认侦听器或添加另一个侦听器。
  11. 对于协议,请选择您的协议。
  12. 对于端口,请选择您的端口。
  13. 在默认操作下,选择创建目标组。
  14. 在指定组详细信息页面上,对于选择目标类型,请选择IP地址。
  15. 对于目标组名称,请输入一个名称。
  16. 在健康检查部分中,保留默认设置。
  17. 选择下一步。
  18. 在注册目标页面上,选择创建目标组。
  19. 导航到创建网络负载均衡器页面。
  20. 在侦听器和路由部分中,对于转发到,请选择您创建的目标组
  21. 选择创建负载均衡器。

来源:https://repost.aws/knowledge-center/ecs-fargate-static-elastic-ip-address


0
  1. 按照“创建VPC”部分的说明进行操作,但在第6步中只选择一个NAT网关,而不是“每个可用区一个”。
  2. 创建一个新的ECS集群,并选择你创建的VPC,在网络部分取消选择公共子网。
  3. 创建/运行任务,并确保使用你的私有子网,并取消选择分配公共IP的选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接