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 错误