AWS VPC 实例之间通过 public IP 进行通信

Communication between AWS VPC instances via public IP

我们有两个 AWS 实例(实例 A 和实例 B),它们 运行 在同一个 VPC 中。实例 A 上有一个面向 Internet 的服务,该服务(通过安全组)仅限于 IP 地址的一个子集。实例 A 有一个 DNS 条目,因此可以通过 someservice.example.org.

访问该服务

当尝试从实例 B 访问服务时,如果我们使用 VPC 内部 IP 地址,它会正常工作,但是我们似乎无法获得正确的安全组配置以允许此实例通过 public DNS 访问。

我们已将 'default' VPC 安全组添加到实例 A,但我们仍然无法直接访问此服务。我们在尝试配置从其他 VPC 访问实例 A 时也遇到了同样的问题。

我知道我们可以为 VPC 创建私有 DNS,这可以解决我们在同一个 VPC 中时的问题,但是当 运行 在另一个 VPC 中时,这并不能解决问题。

这听起来像是 DNS 解析问题。如果您将 Route53 用于 DNS,最简单的解决方法是为您的 VPC 创建一个私有 Route53 DNS 区域并添加如下内容: 指向实例内部 IP 地址的 CNAME 'someservice.example.org'。

请注意,您确实希望尽可能使用内部专用 IP 地址。它会将网络流量保持在您的 VPC 内,这样会更快、更安全。它对您来说也可能更便宜,至少如果实例也在同一可用区内。您可以在数据传输部分的 EC2 pricing page 上阅读更多相关信息。

另请注意,您无法打开安全组以仅允许 VPC/security 组中的实例通过 public IP 访问某些内容。这是因为到达 public IP 的流量被视为来自 "from the internet",而不是来自您的 VPC。您必须通过 public IP 地址而不是安全组来授予对服务器的访问权限。

您还提到使用第二个 VPC,但这将是一个单独的问题,可以通过 VPC Peering 解决。