介绍使用 Amazon 应用程序负载均衡器重写 URL 和主机标头

作者: Mohamad Naji, Mahmoud Elhusseiny |

今天,我们宣布在亚马逊云科技应用程序负载均衡器 (ALB) 上原生重写 URL 和主机标头的功能现已正式上线。您可以使用此新功能根据请求参数实现正则表达式匹配,并在路由到目标之前重写主机标头和网址。

ALB 在 OSI 模型的第 7 层(应用层)上运行,在您的亚马逊云科技可用区 (AZ) 上将传入流量分配到多个目标上,例如 Amazon EC2 实例、容器、Amazon Lambda 函数和 IP 地址。该服务持续监控目标运行状况,确保流量仅流向运营资源,同时自动扩展以适应不断变化的流量模式。到目前为止,实现 URL 或主机标头修改需要自定义应用程序逻辑或部署和维护第三方代理解决方案。

今天的公告通过将更多路由功能直接集成到 ALB 服务中来消除了这种复杂性。组织现在无需更多组件即可通过其现有的亚马逊云科技托管基础设施实施高级请求路由方案。您可以将这些功能整合到 ALB 本身,以受益于简化的架构、更少的维护开销、更低的成本和更短的延迟,同时为您的应用程序创建更直接的请求路径。

它是如何运作的

通过亚马逊云科技管理控制台、亚马逊云科技开发工具包或亚马逊云科技 API,可以在新的和现有的 ALB 上配置条件和 URL 路径以及主机标头重写的正则表达式匹配。如图 1 所示,第三方代理现在可以完全被 ALB 的新原生功能所取代,该功能支持在将传入请求路由到相应的目标组之前,重写和删除传入请求中的路径段。

使用目标群组在 ALB 上重写 URL

图 1:使用目标群组在 ALB 上重写 URL

同样,Kubernetes 用户,尤其是那些使用 ALB 入口控制器的用户,需要重写路径才能正确地将流量路由到容器化服务。他们必须实现代理,例如 NGINX Ingress Controller,这给 Amazon Elastic Kubernetes Service (Amazon EKS) 的部署增加了不必要的复杂性。现在,新的 ALB 功能(如图 2 所示)使用户能够充分使用 ALB,同时简化其微服务架构。

使用 EKS 目标群组在 ALB 上重写 URL

图 2:使用 EKS 目标群组在 ALB 上重写 URL

为了用一个例子来证明这一点,我们考虑了以下场景:一家国际公司维护一个支持多种语言的应用程序。该架构目前分为:

    • 法语和英语后端:已在 Amazon EKS 上迁移和部署,并使用最新的 API 版本 2 (V2) 运行。
    • 所有其他语言后端:目前使用旧版 API 版本 1 (V1) 在 EC2 实例上运行。

该公司正在逐步迁移所有语言的流量,使其在 Amazon EKS 上运行。它支持最新的 API 版本 (V2),需要透明地处理 URL 版本控制,无需修改任何前端应用程序代码。

1. 简化规则:使用正则表达式匹配设置条件

从今天开始,条件规则已扩展到包括两种匹配模式类型:

图案类型 描述 最适合
值匹配(现有) 使用全局语法进行基本模式匹配 完全匹配或通配符匹配的路由规则
正则表达式匹配(新增) 使用正则表达式实现更复杂的模式识别 复杂的路由模式和条件逻辑

对于前面提到的用例,在支持正则表达式之前,路由特定语言的流量需要为每种语言变体创建单独的条件。例如,在我们的用例中:

    • 英语(en)需要一条规则。
    • 法语(fr)需要一条规则。
    • 所有其他语言路线都需要第三条规则。

由于支持正则表达式,鉴于法语和英语域名都路由到运行最新 API 版本 (V2) 的同一 EKS 集群,因此一条规则可以处理这两个域。这极大地降低了配置复杂性并提供了路由清晰度。

要通过控制台创建(或修改现有 ALB 的规则)(如图 3 所示),请执行以下步骤:

    • 导航到您的 ALB 监听器规则。
    • 选择要修改的规则或创建新规则。
    • 对于主机标头条件,请选择正则表达式匹配。正则表达式匹配也可以用于路径条件和 HTTP 标头条件。
    • 在值字段中输入你的正则表达式模式。对于我们的用例:^(en|fr)\.example\.com

条件级别的正则表达式配置示例

图 3:条件级别的正则表达式配置示例

可以使用正则表达式测试器执行测试,以验证语法是否正确(如图 4 所示):

正则表达式语法测试器,用于确认正则表达式在条件下的有效性

图 4:用于确认条件下正则表达式有效性的正则表达式语法测试器

尽管路由功能强大,但我们的迁移方案需要的不仅仅是定向流量。我们需要实现 URL 转换以避免修改应用程序代码。

2. 网址转换:引入转换

转换使您能够在传入请求到达后端目标之前对其进行修改。此功能位于您的条件和请求处理流程中的操作之间。

一个常见的用例是操作路径前缀,包括删除、修改或添加路径前缀。在版本迁移场景中,当我们将其他语言(例如西班牙语)迁移到 Amazon EKS 并需要修改新 API(版本 2)的路径时,我们可以使用路径转换功能。要修改通过控制台的路径(如图 5 所示),请执行以下步骤:

    • 在规则的 "转换" 部分下添加转换 URL 路径。
    • 使用正则表达式识别要转换的模式(例如 (^(en|fr|sp)\.example\.com\/v)1)。
    • 定义替换值(例如,应用正则表达式语法 "$12" 将数字 1 替换为数字 2)。

使用 URL 路径配置转换

图 5:使用 URL 路径配置转换

与在条件下使用 Regex 进行测试类似,该控制台包含一个便捷的测试工具,可帮助您验证变换(如图 6 所示)。

测试变换,我们看到路径中的数字 1 替换为 2

图 6:测试变换,我们看到路径中的数字 1 替换为 2

我们已经演示了如何将正则表达式匹配应用于路径路由条件,以及变换功能如何在无需更改代码的情况下实现路径操作。正则表达式匹配可以独立于变换与条件一起使用,并且转换可以应用于标准值匹配条件。

这种组合支持逐步迁移策略,无需在整个应用程序堆栈中立即进行代价高昂的代码更改。

结论

在这篇文章中,我们探讨了如何使用这项新功能,演示了其实际实现,并展示了它可以显著改善您的应用程序架构的几种现实场景。

正则表达式匹配和请求转换的这种组合可以控制通过 ALB 流向后端服务的流量,而无需进行更多基础设施或代码更改。

此功能现已在亚马逊云科技商业区域、亚马逊云科技 GovCloud(美国)区域和亚马逊云科技中国区域提供。要了解有关 ALB 功能的更多信息,请参阅应用程序负载均衡器文档。如果你对这篇文章有疑问,可以在亚马逊云科技 re:POST 上发一个新话题或联系 Amazon Support。

作者简介

穆罕默德·纳吉的照片

Mohamad Naji

穆罕默德·纳吉是亚马逊云科技的高级解决方案架构师。他居住在蒙特利尔,在 IT 行业拥有超过 15 年的经验,主要与金融服务客户合作。他专注于帮助客户为高度可扩展和弹性的亚马逊云科技环境构建和开发架构。工作之余,他热爱各种运动,热爱旅行。

Mahmoud elHousseiny 的照片

Mahmoud Elhusseiny

Mahmoud Elhusseiny 是亚马逊云科技的高级解决方案架构师,与中东、北非和土耳其的客户合作。他的丰富经验涵盖各种技术和行业垂直领域,使他成为众多企业、以数字为中心的企业和独立软件供应商值得信赖的顾问,促进了他们的无缝导航和加速云之旅,并帮助他们创新新的解决方案,以增强其最终用户体验并提高业务效率。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。