问题描述
在构建AWS基础设施时遇到了问题。由于遗留的限制,他需要访问一个运行在远程VPC中的服务,并且他正在另一个VPC中开发一个新的服务。这两个VPC是分开的,因为较新的VPC由Terraform管理,他计划将所有服务迁移到Terraform,但这需要很长时间。因此,目前他希望使用AWS VPC Peering连接这两个VPC(他拥有这两个VPC和两个服务的所有权,可以控制这个基础设施中的任何内容,但无法控制远程服务的代码和部署细节,这是一个黑盒)。
远程服务可能部署为单个EC2实例,新服务使用ECS Fargate部署,并在其上有一个ALB。涉及到3个安全组:远程实例安全组、ECS安全组和ALB安全组。
用户查看了文档,以及一些相关页面,并执行了适当的步骤。特别是,他做了以下操作:
– 创建了VPC Peering连接
– 接受了Peering连接
– 在两个VPC的路由表中添加了条目,其中目标是另一个VPC的CIDR块,目标是Peering连接的ID
– 在远程服务安全组中添加了一个TCP例外,允许来自ECS安全组的入站流量(通过安全组ID),反之亦然
– 检查了网络ACL,确保有一个允许规则接受流量
但是,当用户尝试通过Peering连接进行请求时,请求被丢失,从未返回。它没有在远程服务器上记录,这意味着我认为它从未到达。用户在ECS安全组内启动了一个EC2实例,并尝试手动调用远程资源(使用curl),但也没有成功。
用户已经按照所有能找到的指南进行了操作,但无法解决这个问题。作为AWS的新手,他想知道是否还有其他的想法。谢谢。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答1,您需要检查您尝试连接远程服务的方式。请比较两个VPC中解析到远程服务的IP地址,使用nslookup命令进行比较。如果解析的IP地址不同,那么流量将尝试通过公共互联网而不是Peering连接。
可能需要共享私有托管区域或在Peering连接中共享内部主机名。您可以参考以下链接了解如何实现:
– 共享私有托管区域
– 在Peering连接中共享内部主机名
请注意,这些操作可能需要一些额外的配置和设置,具体取决于您的环境和需求。