AWS ECS Fargate 任务的静态出站 IP

Posted

技术标签:

【中文标题】AWS ECS Fargate 任务的静态出站 IP【英文标题】:Static outbound IP for AWS ECS Fargate task 【发布时间】:2020-01-16 07:59:09 【问题描述】:

我有一个带有服务的 Docker 容器,我想通过带有 Fargate 的 AWS ECS 运行该容器。不幸的是,我要运行的服务需要访问需要将 IP 列入白名单的合作伙伴的 SFTP 服务器。

我现在的问题是:如何将 静态 IP (IPv4) 分配给 AWS ECS Fargate 任务?我已经设置了一个 VPC、子网、互联网和 NAT 网关,并将它们相互分配。但我看到的最大问题是,每次使用 Fargate 执行任务时,都会分配一个具有不同 IP 的新 ENI。

如果能得到一些帮助会很棒! :)

【问题讨论】:

仅供参考:这里有一个非常详细的博客:medium.com/@gboyegadada/… John 的评论是这个问题的答案 - 使用 NAT 网关 【参考方案1】:

我们目前遇到了同样的问题,我们找到的解决方案是将整个子网 CIDR(例如 10.11.12.13/24)列入白名单,它运行良好,但我们仍然觉得它不安全。

我发现response 建议使用 NAT 网关来 nat 容器的 IP 地址。这是 Lambda 用例的link,仍然需要测试它的 Fargate。

【讨论】:

子网 CIDR 是私有 IP,所以不像 SFTP 服务器从外部看到的那样,所以我不知道它是如何工作的。 我假设 ECS Fargate 希望通过 *** 或直接连接访问 SFTP 服务器,在这种情况下,私有 IP 工作正常。如果 OP 想要将静态输出公共 IP 列入白名单,他只需要将 NAT 网关 IP 列入白名单,这是我过去做过并测试过的。【参考方案2】:

有一个有趣的GitHub repo 解释了用例以及如何为fargate服务实现静态IP。

为什么?

第三方可能希望将您应用的 IP 列入白名单。大部分步骤都覆盖了using-static-ip-addresses-for-application-load-balancers

创建 Fargate 集群

使用向导创建集群。

与集群一起,它将创建一个 VPC 和安全组。找 并给他们起有用的名字。

在您的 VPC 安全组中为 HTTP 和 HTTPS 设置您的入站。

弹性 IP

在EC2下找到>弹性IP

分配两个静态 IP。每个可用性组一个。

网络负载均衡器

在 EC2 > 负载均衡器下找到它

创建 NLB。在可用区下为其分配 VPC 和弹性 IP 你之前创建的。

使用目标类型 IP 和协议 TCP 创建一个新目标组。

将 IP 留空。接下来。

应用负载均衡器

从 VPC 添加现有安全组。

创建一个新的目标组。键入 IP。协议 TCP。

将 IP 留空。接下来。

Fargate 服务

在您的集群中创建一个新服务。

选择您创建的应用程序负载均衡器。

选择现有的 ALB 目标组。

架构图或多或少会这样

【讨论】:

Github repo 链接已损坏 我有点困惑,这个答案似乎是 AWS ECS Fargate 任务的静态 inbound IP 的答案。这真的解决了OP提出的问题吗?我的意思是 Fargate 任务需要一个静态 IP 作为客户端才能连接到远程服务。 您的答案有几个缺陷:1)您提供的链接是将 NLB 与 ALB 结合使用,这不是必需的 2)没有“可用性组”之类的东西。您可能指的是可用区 (AZ) 3) 该图显示了一个永远不会工作的 ALB; ALB 不允许您使用静态 IP(在 AWS 术语中称为弹性 IP);该图应显示 NLB 此设置仅适用于入站流量。每个任务都分配有一个 IP 地址,该 IP 用于出站。

以上是关于AWS ECS Fargate 任务的静态出站 IP的主要内容,如果未能解决你的问题,请参考以下文章

AWS ECS Fargate 未创建任务 AmazonECSTaskExecutionRole 错误

在 AWS ECS Fargate 中,任务内无法进行容器间连接

AWS ECS Fargate 模式 - 自动扩展

AWS ECS Fargate ALB 错误(请求超时)

AWS ECS Fargate 和端口映射

如何诊断 ECS Fargate 任务启动失败?