在 AWS 中,我有几个 VPC。在每个 VPC 中,我都有一个 EC2 实例,运行一个服务器。目前,每个 EC2 都有一个弹性 IP,因为我的服务器专用于 IoT,并且我们的连接对象需要专用 IP 地址,它们不能使用 DNS。当然,每个 VPC 都适用于不同的客户。
这是一个非常简单的架构图:
当然,我也有所有专用网络来访问服务器,这意味着安全组、互联网网关等。但始终有一个专用 VPC。
但在 AWS 上,每个区域限制为 5 个 Elastic IP。因此,我需要找到一个解决方案,不为每个实例使用一个 Elastic IP。
我可以在 AWS 上使用什么解决方案?简单的方法是创建一个 NAT,使用一个 EIP 并使用端口重定向到正确的服务器。就像这样:
但问题是我使用的是不同的 VPC。
我如何在不同的 VPC 之间做到这一点?
(我提到 NAT 是因为这是我在“aws 世界”之外所知道的解决方案,但可能还有其他解决方案,如 NAT 网关、NAT 实例、传输网关、Internet 网关等。我有点迷茫)
谢谢
答案1
您可以使用VPC 对等连接前端 VPC 中具有 NLB 的 VPC 与其他 VPC 之间。
VPC 对等连接是两个 VPC 之间的网络连接,可让您使用私有 IPv4 地址或 IPv6 地址在它们之间路由流量。任一 VPC 中的实例都可以相互通信,就像它们位于同一网络中一样。您可以在自己的 VPC 之间或与另一个 AWS 账户中的 VPC 创建 VPC 对等连接。VPC 可以位于不同的区域(也称为区域间 VPC 对等连接)。
答案2
如果您成功了,那么每个客户一个 VPC 的规模不会持续太久。这是每个区域每个帐户 5 个 VPC 的软限制(即可以提高),我不知道 AWS 会将其提高到多高。
每个帐户的弹性 IP 数量软限制为 5 个。我认为 AWS 愿意提高这个数字,但 IPv4 是一种稀缺资源,所以我怀疑他们是否会给你大量的 IP。当然,每个实例都会获得一个公共 IP 地址,但如果你停止/启动实例,它会发生变化。
NAT 用于出口,而不是入口。我认为它不会帮助你。如果你可以在指定端口上为每个客户使用一个 IP,通过中央帐户进行代理,那么这将是高效的并且可以扩展。不过,你可能会遇到防火墙问题,这意味着你可能要为流量支付两次费用 - 一次进入代理,然后一次流出到为其提供服务的 VPC/帐户。
中转网关
Transit Gateway 可在一个或多个账户中提供几乎任意数量的 AWS VPC 连接。它比 VPC 对等连接更简单,因为它采用的是中心辐射型架构,而不是点对点架构。
如果您不希望您的帐户相互关联,而只想关联到一个中央帐户,则可以设置防火墙来隔离帐户。我为此使用 NACL,保留安全组以进行分层(Web、应用程序、数据库等)。我已经使用 CloudFormation 为当前项目自动创建了 NACL - 我们几乎将所有内容都部署为代码。
Transit Gateway 按每个 VPC 连接收费。我记得它比 VPC 对等连接贵一点,但 VPC 对等连接可能会对发送和接收的数据收费,因此两者价格差不多。我没有详细研究过这个问题,因为在合理范围内,企业并不真正关心带宽成本。
您需要使用一个 Elastic IP 来传输到多个 VPC,而 Transit Gateway 无法满足这一要求。这可能必须由在实例中运行的 Nginx 之类的程序来完成,不过也许您可以考虑使用 ALB/NLB 来实现这一点。我目前没有时间充分考虑您的要求并创建解决方案。
好的解决方案
IPv6 拥有大量地址。如果您的客户端可以支持 IPv6,那么这是一个可扩展的解决方案。您不需要为 IPv6 使用弹性 IP,只需为您的 VPC 分配一个 IPv6 范围,它就属于您,无需 NAT。
使用此选项,您仍然会遇到每个帐户的 VPC 限制。
更好的解决方案
每个客户一个账户的多账户架构更容易扩展,并且可以避免限制。使用 AWS Control Tower 管理账户。Transit Gateway 可以为您进行账户间联网,但要注意成本。
多账户管理起来并不特别困难。您可以设置一个 AWS 组织,并将您的账单信息放入其中 - 信用卡或您可以使用 AWS 安排每月发票。您可以使用 AWS 组织(可以)创建新账户,或者如果您使用 Control Tower,它有一个账户工厂。Control Tower 的优势在于它为您提供了各种最佳实践安全性。缺点是创建一个新的 AWS 账户需要一个小时,因为它必须将所有控制措施推广到每个新账户。
最佳解决方案
我建议最好的解决方案是编写应用程序以通过一个帐户/ VPC / IP 为多个客户提供服务(如果您的客户可以这样做)。使用某种身份验证/授权服务来确保请求与正确的客户相关联。