从互联网接收到 Amazon ECS 的入站连接的最佳实践 - Amazon Elastic Container Service

从互联网接收到 Amazon ECS 的入站连接的最佳实践

如果您运行公共服务,则必须接受来自互联网的入站流量。例如,您的公共网站必须接受来自浏览器的入站 HTTP 请求。在这种情况下,互联网上的其他主机也必须启动到您的应用程序主机的入站连接。

解决此问题的一种方法是,在具有公有 IP 地址的公有子网中的主机上启动容器。但是,不建议对大型应用程序使用此方法。对于这些应用程序,更好的方法是在互联网与您的应用程序之间建立一个可扩展的输入层。对于这种方法,您可以使用本节中列出的任何 AWS 服务作为输入。

应用程序负载均衡器

应用程序负载均衡器在应用程序层正常运行。这是开放系统互连(OSI)模型的第 7 层。这使得应用程序负载均衡器适合公共 HTTP 服务。如果您有网站或 HTTP REST API,则应用程序负载均衡器就是适合此工作负载的负载均衡器。有关更多信息,请参阅《应用程序负载均衡器用户指南》中的什么是应用程序负载均衡器?

该图显示了使用应用程序负载均衡器的网络架构。

使用此架构,您可以在公有子网中创建应用程序负载均衡器,使其具有公有 IP 地址并可以接收来自互联网的入站连接。当应用程序负载均衡器收到入站连接(或者更具体地说,HTTP 请求)时,它将使用其私有 IP 地址打开与应用程序的连接。然后,其通过内部连接转发请求。

应用程序负载均衡器有以下优势。

  • SSL/TLS 终止 – 应用程序负载均衡器可以维持安全的 HTTPS 通信和证书,以便与客户端通信。它可以选择在负载均衡器级别终止 SSL 连接,这样您就不必在自己的应用程序中处理证书了。

  • 高级路由 – 应用程序负载均衡器可以有多个 DNS 主机名。它还具有高级路由功能,可以根据请求的主机名或路径等指标将传入的 HTTP 请求发送到不同的目的地。这意味着您可以使用单个应用程序负载均衡器作为许多不同内部服务的输入,甚至是 REST API 不同路径上微服务的输入。

  • gRPC 支持和 Websocket – 应用程序负载均衡器可以处理的不仅仅是 HTTP。它还可以对 gRPC 和基于 Websocket 的服务进行负载均衡,并支持 HTTP/2。

  • 安全 – 应用程序负载均衡器可帮助保护您的应用程序免受恶意流量的侵害。它包括 HTTP 取消同步缓解等功能,并与 AWS Web 应用程序防火墙(AWS WAF)集成。AWS WAF 可以进一步过滤掉可能包含攻击模式的恶意流量,例如 SQL 注入或跨站脚本攻击。

网络负载均衡器

网络负载均衡在开放系统互连 (OSI) 模型的第四层运行。它适用于非 HTTP 协议或需要端到端加密的场景,但不具有与应用程序负载均衡器相同的 HTTP 特定功能。因此,网络负载均衡器最适合不使用 HTTP 的应用程序。有关更多信息,请参阅《网络负载均衡器用户指南》中的什么是网络负载均衡器?

该图显示了使用网络负载均衡器的网络架构。

当使用网络负载均衡器作为输入时,其功能与应用程序负载均衡器类似。这是因为它是在公有子网中创建的,并且具有可在互联网上访问的公有 IP 地址。然后,网络负载均衡器会打开与运行容器的主机私有 IP 地址的连接,并将数据包从公共端发送到私有端。

网络负载均衡器功能

由于网络负载均衡器在较低的网络堆栈级别运行,因此它不具备与应用程序负载均衡器相同的功能集。但是,它确实具有以下重要功能。

  • 端到端加密 – 由于网络负载均衡器在 OSI 模型的第四层运行,因此它不会读取数据包的内容。这使其适用于需要端到端加密的负载均衡通信。

  • TLS 加密 – 除了端到端加密外,网络负载均衡器还可以终止 TLS 连接。这样,您的后端应用程序就不必实现自己的 TLS 了。

  • UDP 支持 – 由于网络负载均衡器在 OSI 模型的第四层运行,因此它适用于非 HTTP 工作负载和 TCP 以外的协议。

关闭连接

由于网络负载均衡器不遵循 OSI 模型更高层的应用程序协议,因此它无法使用这些协议向客户端发送关闭消息。与应用程序负载均衡器不同,这些连接需要由应用程序关闭;您也可以将网络负载均衡器配置为在任务停止或替换时关闭第四层连接。请参阅网络负载均衡器文档中网络负载均衡器目标组的连接终止设置。

如果客户端不进行处理,让网络负载均衡器关闭第四层连接可能会导致客户端显示不需要的错误消息。有关推荐的客户端配置的更多信息,请在此处参阅生成器库。

关闭连接的方法因应用程序而异,但有一种方法是确保网络负载均衡器目标注销延迟的时间比客户端连接超时长。客户端将首先超时,然后通过网络负载均衡器正常重新连接到下一个任务,而旧任务会慢慢耗尽所有客户端。有关网络负载均衡器目标注销延迟的更多信息,请参阅网络负载均衡器文档

Amazon API Gateway HTTP API

Amazon API Gateway 适用于请求量突然激增或请求量较低的 HTTP 应用程序。有关更多信息,请参阅《API Gateway 开发人员指南》中的什么是 Amazon API Gateway?

该图显示了使用 API Gateway 的网络架构。

应用程序负载均衡器和网络负载均衡器的定价模型都包括每小时价格,以使负载均衡器随时可以接受传入的连接。相比之下,API Gateway 会对每个请求单独收费。其效果是,如果没有收到请求,则不收取任何费用。在高流量负载下,应用程序负载均衡器或网络负载均衡器能够以比 API Gateway 更便宜的每次请求价格处理更大的请求量。但是,如果您的请求总数较少或流量较低,则使用 API Gateway 的累积价格应该比按小时收费来维护未得到充分利用的负载均衡器更经济实惠。API Gateway 还可以缓存 API 响应,这可能会降低后端请求速率。

API Gateway 功能使用 VPC 链接,允许 AWS 托管服务使用其私有 IP 地址连接到 VPC 私有子网内的主机。它可以通过查看由 Amazon ECS 服务发现管理的 AWS Cloud Map 服务发现记录来检测这些私有 IP 地址。

API Gateway 支持以下功能。

  • API Gateway 操作与负载均衡器类似,但具有 API 管理独有的附加功能

  • API Gateway 提供了有关客户端授权、使用套餐和请求/响应修改的其他功能。有关更多信息,请参阅 Amazon API Gateway 功能

  • API Gateway 可以支持边缘、区域和私有 API 网关端点。边缘端点可通过托管的 CloudFront 分配获得。区域端点和私有端点均为区域本地。

  • SSL/TLS 终止

  • 将不同的 HTTP 路径路由到不同的后端微服务

除了上述功能外,API Gateway 还支持使用自定义 Lambda 授权方,您可以使用这种方法保护您的 API 免于未经授权的使用。有关更多信息,请参阅 Field Notes: Serverless Container-based APIs with Amazon ECS and Amazon API Gateway