出站 API 调用的静态 IP

Posted

技术标签:

【中文标题】出站 API 调用的静态 IP【英文标题】:Static IP for outbound API calls 【发布时间】:2019-07-03 01:03:19 【问题描述】:

我们使用的一项新的 api 服务要求我们向他们提供我们的调用将来自的所有 IP 地址的列表;如果我们从任何其他 IP 地址进行 api 调用,调用将失败。

这个问题已经在此之前提出过,但我想知道 2019 年是否有任何更简单/更容易/成本更低的解决方案。

我们的设置

Elastic Beanstalk,目前可根据流量为我们的 Web 应用程序扩展到 5 到 50 个 ec2 实例 应用负载均衡器 还有一个工作层,如果有帮助,可以使用它 通常,这些 api 调用将来自我们的任何 Web 层 ec2 实例,因为这些调用将基于用户交互。我们当然可以设置不同的东西,例如让工作层调用

我找到的解决方案

给每个 ec2 实例一个弹性(静态)IP 地址。这对我们来说不是一个很好的解决方案,因为我们希望继续扩展所需的 IP 地址数量将继续增长ref

设置两个 NAT 实例(一个是不够的,因为它会成为单点故障)。我希望有比这个选项更简单、成本更低的东西。 ref ref

创建新的 ec2 实例并将它们放在网络负载均衡器后面。同样,复杂且昂贵。 ref

是否有任何新的、更简单、成本更低的解决方案?我以前从未使用过 AWS Lambda;也许可以从一个 IP 地址运行 Lambda 函数?在这一点上,我没有太多的想法。感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

NAT 是最好的解决方案,它的成本应该不会比网络服务器高多少。

使用 NAT 的最简单方法是 NAT Gateway。定价取决于地区,但大约为 0.05 美元/小时,比t3.medium EC2 实例的价格略高。您还需要按每 GB 的数据费率收费,这可以快速加起来。从积极的方面来说,亚马逊会为您管理基础设施,包括补丁和高可用性。

NAT Instance 是一个运行特殊配置的 AMI 的 EC2 实例。您可能可以在 t3.micro 实例上以每小时 0.01 美元的价格运行它,这可能比您的任何网络服务器都要低得多。如果出现任何问题,您将负责应用补丁并在半夜醒来。

您可能可以使用任何一种类型的单个 NAT。您将为此支付跨 AZ 流量的费用(0.01 美元/GB),因此如果您跨 NAT 移动大量数据,这将是虚假的经济。您是否会从两个 NAT 获得更高的可用性是一个问题,因为您一次只能在路由表中引用一个。因此,如果一个发生故障,您必须更新路由表以指向另一个,这可能需要与启动一个新实例一样多的时间。

您不能使用 Lambda,因为它需要有一个永久的 IP 地址分配,而您无法使用 Lambda 控制它。您可以编写自己的代理服务器,在 EC2 上运行,但成本与 NAT 实例相同。

【讨论】:

谢谢。我不是网络人。文档说 NAT 网关“......阻止互联网与这些实例建立连接”。我们仍然能够收到 api 调用响应吗? @KayakinKoder 是的。 NAT 网关可防止 Internet 上的机器启动连接到 NAT 后面的机器。响应将按预期工作。另请注意,NAT 网关是虚拟的——由网络基础设施本身提供的服务,而不是机器——因此每个 AZ 一个就足够了。唯一已知的 NAT 网关故障模式是 (1) 根本无法创建初始,或 (2) 严重的基础设施损坏/丢失/故障/隔离可用区,从而影响整体网络连接。

以上是关于出站 API 调用的静态 IP的主要内容,如果未能解决你的问题,请参考以下文章

AWS ECS Fargate 任务的静态出站 IP

Http出站网关在工作,但没有进行调用--使用spring集成DSL java。

在 istio 网格内的 pod 的所有出站 HTTP 调用上获取 404

11.netty入站与出站(处理器链调用机制)

消费层上 Azure Function App 的白名单 IP

静态,关键字:static 接口,IUSB , API 接口关键字:interface