将 Amazon ECS 应用程序连接到互联网 - Amazon Elastic Container Service

将 Amazon ECS 应用程序连接到互联网

大多数容器化应用程序至少有一些组件需要出站访问互联网。例如,移动应用的后端需要出站访问权限才能推送通知。

Amazon Virtual Private Cloud 有两种主要方法可促进您的 VPC 与互联网之间的通信。

公有子网和互联网网关

该图显示了连接到互联网网关的公有子网架构。

当您使用具有到互联网网关的路由的公有子网时,您的容器化应用程序可以在公有子网上 VPC 内的主机上运行。运行容器的主机分配了公有 IP 地址。此公共 IP 地址可从互联网路由。有关更多信息,请参阅《Amazon VPC 用户指南》中的互联网网关

这种网络架构便于运行您的应用程序的主机与互联网上的其他主机之间的直接通信。通信是双向的。这意味着不仅您可以与互联网上的任何其他主机建立出站连接,而且互联网上的其他主机也可尝试连接到您的主机。因此,您应该密切关注安全组和防火墙规则。这样可以确保互联网上的其他主机无法打开任何您不想打开的连接。

例如,如果您的应用程序在 Amazon EC2 上运行,则请确保未打开用于 SSH 访问的端口 22。否则,您的实例可能会不断收到来自互联网上恶意机器人的 SSH 连接尝试。这些机器人通过公有 IP 地址拖网。其找到一个开放的 SSH 端口后,会尝试暴力破解密码以尝试访问您的实例。因此,许多组织限制了公有子网的使用,并倾向于将大部分(如果并非全部)资源放在私有子网中。

使用公有子网进行联网适用于需要大量带宽或最小延迟的公共应用程序。适用的使用案例包括视频流和游戏服务。

当您在 Amazon EC2 上使用 Amazon ECS 以及在 AWS Fargate 上使用 Amazon ECS 时,都支持这种联网方法。

  • Amazon EC2 – 您可以在公有子网上启动 EC2 实例。Amazon ECS 使用这些 EC2 实例作为集群容量,在这些实例上运行的任何容器都可以使用主机的底层公有 IP 地址进行出站联网。这适用于 hostbridge 网络模式。但 awsvpc 网络模式不提供具有公有 IP 地址的任务 ENI。因此,他们不能直接使用互联网网关。

  • Fargate – 创建 Amazon ECS 服务时,为服务的联网配置指定公有子网,并使用分配公有 IP 地址选项。每个 Fargate 任务都在公有子网中联网,并有自己的公有 IP 地址,用于与互联网直接通信。

私有子网和 NAT 网关

该图显示了连接到 NAT 网关的私有子网架构。

使用私有子网和 NAT 网关时,可以在私有子网中的主机上运行容器化应用程序。因此,该主机的私有 IP 地址可在您的 VPC 内路由,但不能从互联网进行路由。这意味着 VPC 内的其他主机可以使用其私有 IP 地址连接到该主机,但是互联网上的其他主机无法与该主机进行任何入站通信。

借助私有子网,您可以使用网络地址转换(NAT)网关允许私有子网中的主机连接到互联网。互联网上的主机收到的入站连接显示为来自公有子网内 NAT 网关的公有 IP 地址。NAT 网关负责充当互联网和私有 VPC 之间的桥梁。出于安全考虑,通常首选这种配置,因为其意味着您的 VPC 受到保护,不会被互联网上的攻击者直接访问。有关更多信息,请参阅《Amazon VPC 用户指南》中的 NAT 网关

这种私有联网方法适用于您想要保护容器免于外部直接访问的场景。适用场景包括支付处理系统或存储用户数据和密码的容器。您在账户中创建和使用 NAT 网关会产生费用。NAT 网关小时使用费率和数据处理费率也适用。出于冗余目的,您应在每个可用区中有一个 NAT 网关。这样,单个可用区的失去可用性不会影响您的出站连接。因此,如果您的工作负载较小,则使用私有子网和 NAT 网关可能更经济实惠。

在 Amazon EC2 上使用 Amazon ECS 以及在 AWS Fargate 上使用 Amazon ECS 时,都支持这种联网方法。

  • Amazon EC2 – 您可以在私有子网上启动 EC2 实例。在这些 EC2 主机上运行的容器使用底层主机联网,出站请求通过 NAT 网关传输。

  • Fargate – 创建 Amazon ECS 服务时,为服务的联网配置指定私有子网,并且不使用分配公有 IP 地址选项。每个 Fargate 任务都在私有子网中托管。其出站流量通过您与该私有子网相关联的任何 NAT 网关进行路由。