我们正在通过 CloudFormation 在 AWS VPC 内部启动基础设施。
我们正在使用自动扩展组来启动 VPC-EC2 实例(因此,我们不会直接启动实例;ASG 负责管理)。
在 PVC 内部,EC2 实例只有一个私有 IP;如果不进一步努力,他们就无法看到外面的世界。
当这些实例启动时,我们会执行一些需要与各种 AWS API 通信的引导任务。我们还有一些需要 AWS API 流量的持续任务。
您如何解决这个明显的先有鸡还是先有蛋的问题?
我们读过:
- NAT 实例 - 但不太喜欢这个,因为它是我们堆栈的另一层。
- 为每个需要通信的 VPC 实例分配弹性 IP - 但 a) 它们都需要通信;b) 由于我们使用的是 ASG,因此我们不知道在配置时要将 EIP 分配给哪些实例;c) 我们需要设置一些东西来监控这些 ASG,并在实例终止和替换时分配 EIP
- 启动一个实例(实际上是一对负载均衡实例,可能跨越多个可用区)作为所有 API 流量的 AWS-API 代理
我想知道是否有某种后门可以打开,允许我们的 VPC EC2 实例访问 AWS API 端点,但没有其他任何东西,为了实现低复杂性的设置,它不会在我们的基础设施中添加另一个网络跳转层来处理请求。
答案1
您已经了解了让私有子网中的 VPC 实例与外界通信的主要方法。
- 将私有子网的互联网流量路由到连接到您办公室的 VPN 隧道,然后该隧道即可提供对互联网其余部分的访问。这不是理想的选择,因为它需要始终在线的 VPN 隧道和通过您办公室的额外跳跃。
我建议使用 NAT 实例,这是让私有子网内的机器访问互联网的推荐设置。它们是按子网配置的,因此您的机器在启动时不需要了解它们的配置。只需确保使用 m1.large 或更大的实例即可获得更高的网络吞吐量(与 m1.small 相比)
答案2
截至 2015 年 4 月,AWS 现已针对此问题提供了一个直接的解决方案:VPC 终端节点
VPC 终端节点可让您在 VPC 与其他 AWS 服务之间创建私有连接,而无需通过 Internet、NAT 实例、VPN 连接或 AWS Direct Connect 进行访问。终端节点是虚拟设备。它们是水平扩展、冗余且高度可用的 VPC 组件,允许 VPC 中的实例与 AWS 服务之间进行通信,而不会对网络流量造成可用性风险或带宽限制。