我们使用的服务的 API 将拒绝请求,除非源 IP 之前已列入白名单。他们只给我们 3 个位置,这是一个问题,因为我们有 3 台以上的机器需要使用 API。
解决这个问题最常用的技术是什么?
笔记:我并没有试图做任何违反第三方 API 条款和条件的事情。我们正在使用经销商俱乐部我联系他们要求提供更多时段,但他们回复说:
我请求您将您的服务器路由到几组 IP。
因此提出这个问题。
想法:
- 我在想,我们可以通过运行一种充当中间人的代理来解决这个问题。我们不是向第三方发出 API 请求,而是向我们的代理发出请求,代理会将请求反弹给第三方,这样在他们看来,所有请求似乎都来自一个 IP。有没有通用的软件可以做这种事?这样做似乎比下面的想法更简单,但我错了吗?
- 我是否应该研究使用“NAT实例”?例如http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html。看起来很复杂——没有更简单的解决方案吗?(运行带有额外网络复杂性的额外实例是一种耻辱)。
- 由于我们使用 Docker,编织有相关性吗?
- 我们可以将静态 IP 附加到 VPC 网关吗?我发现使用 AWS Storage Gateway 是可行的(来源) - 但不确定常规 vpc igw?
我们的架构:我们使用 AWS,并将实例放在 ELB 后面的 VPC 中。我们经常在不知道 IP 地址的情况下启动新实例。我们在所有机器上运行相同的软件。机器运行 CoreOS,我们的应用程序在 Docker 容器中运行。
答案1
一种相当常见的基础设施是,实际的应用服务器都没有公共 IPv4 IP 地址,它们位于负载均衡器后面的 RFC 1918 私有网络范围内,并且它们发出的任何传出请求都是:
- 通过 NAT 网关路由,呈现出单一源 IP 地址
- 必须通过代理服务器进行,代理服务器在私有 IP 范围和更大的互联网之间架起桥梁
答案2
我想我应该发布一个更新,因为该项目现在已经使用 NAT 实例成功完成。
我是否应该研究使用“NAT实例”?这看起来很复杂 - 有没有更简单的解决方案?
现在 NAT 实例已全部设置完毕,最初的复杂性已经过去,实际上感觉相当简单 - 甚至比以前更干净(因为被迫使用私有子网可以提高安全性)。
AWS 的官方 NAT 实例设置说明效果很好:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html我们使用亚马逊提供的 AMI 来启动 NAT 实例。经历了这个过程后,我意识到它是多么的“行业标准”,甚至可以说是“最佳实践”。
缺点:
- NAT 实例成为单点故障。由于来自我们网络服务器的所有外部流量都通过它路由,如果它发生故障,实例将无法访问互联网以接收软件更新、调用外部 API(例如支付网关),并且我们将无法通过 SSH 进入实例。
- 运行额外的机器需要花钱,而且维护成本也更高。(
t2.small
不是很昂贵,而且库存 AMI 不需要修改,因此维护负担不会很大)。 - 实例的外部网络连接会变慢。(到目前为止我还没有注意到差别)。
- 我们不能直接通过 SSH 进入实例,我们需要通过 NAT 实例(使用 SSH 代理)。这听起来比实际情况更糟糕。如果您花几分钟编辑
.ssh/config
和阅读“ProxyCommand
”,您可以让事情 100% 透明,这样使用起来就很简单ssh server1
了。 - 我们无法再使用集群中的特定服务器的公共 IP(或特定机器的 DNS 记录)来测试它。这是你很快就会克服的问题。如果你真的需要确保只测试一台机器,那么一个解决方法就是创建一个新的 ELB,并只将你想要测试的机器放入实例池中。