不同vpc子网中的aws ec2实例相互访问

aws ec2 instances in different vpc subnets access each other

我有 2 个 AWS EC2 实例位于我的 vpc 的 2 个 不同 子网中。

我想允许 ruby 应用程序 运行 在第一个实例中(比如 App#1)调用应用程序的端点(在第二个实例中说 App#2) 运行。

我还希望我的用户从他们的浏览器直接调用 App#2 的端点。


以下是我尝试过的(大部分都失败了):

  1. [成功!] 我将用户的已知 IP 地址添加到 App 的负载均衡器安全组的 inbound 规则# 2 并确认他们可以从浏览器访问 App#2 端点。

  2. [失败!] 我将 App#1 的负载均衡器安全组 ID 添加到 inbound 规则到 App#2 的负载均衡器安全组。但是我的日志告诉我 App#1 无法访问 App#2 的端点。

  3. [失败!] 我将 App#1 的 VPC 安全组 ID 添加到 inbound 规则中App#2 的负载平衡器安全组 - 不,仍然不起作用。 (不知何故,当我为 App#1 启动实例时,aws 自动为此实例创建了 2 个安全组 - 一个用于 VPC,一个用于负载均衡器......我不知道 why/how 这发生了...)

  4. [失败!] 我为子网添加了 CIDR App#1 进入了 inbound 规则App#2 的负载均衡器安全组。还是没有喜悦。

  5. [成功...有点] 我为实例分配了一个弹性 IP 运行 App#1 并将其添加到 入站 App#2 的负载均衡器安全组的规则。这行得通,但我不想使用这种方法,因为我想在将来弹性扩展我的 App#1 并且我不知道如何为新实例自动分配更多弹性 IP当它们启动时,将它们添加到 inbound 规则中,然后在它们关闭时以某种方式删除它们。

我觉得必须有一个非常干净的解决方案来解决这个问题,我可能遗漏了一些非常明显的东西。有人可以给我提示吗?

如有任何帮助,我们将不胜感激!

因此 A​​pp#2 在 public 子网中,A​​pp#1 在私有子网中。例如,图表将类似于:

Internet => LB#2 => App#2:80(在 public 子网中)=> LB#1 => App#1:4567(在私有子网中)

  • 让我们打开所有实例和负载均衡器中的所有入站规则,检查您是否可以通过互联网访问它,
  • 然后每次在每一层应用安全组,不要同时更改所有这些。

让我知道哪一层有问题。

听起来您可能正在使用负载均衡器的 public IP 地址,因此看起来流量来自外部。尝试使用私有 IP/DNS(如果有的话),或者设置第二个面向内部的负载均衡器。