跳至内容

如何在应用程序负载均衡器上设置基于路径的路由?

2 分钟阅读
0

我计划在应用程序负载均衡器后面运行多个微服务。我想根据 URL 路径将请求转发到特定的目标组。

简短描述

您可以使用应用程序负载均衡器创建侦听器,并在其中包含基于 URL 将请求转发到目标组的规则。路径模式规则仅适用于 URL 的路径,不适用于 URL 的查询参数。有关路径模式的详细信息,请参阅 Path conditions

**注意:**经典负载均衡器、网络负载均衡器或网关负载均衡器不支持此功能。

要在应用程序负载均衡器上建立基于路径的路由,请完成以下步骤:

  1. 创建目标组。
  2. 配置侦听器规则。

先决条件:

解决方法

创建目标组

创建实例后,将这些实例注册到目标组。基于配置的侦听器规则,应用程序负载均衡器会根据您指定的端口和协议将请求发送到已注册的目标。但是,在单独注册目标时,您可以覆盖端口信息。有关详细信息,请参阅 Create a target group for your Application Load Balancer

例如,假设您有两项服务,服务 A 和服务 B。运行这两项服务的应用程序均使用端口 80。服务 A 在路径 /svcA 上运行应用程序,服务 B 在路径 /svcB 上运行应用程序。

  • 您创建了两个目标组,其中 Protocol(协议)为 HTTPPort(端口)为 80,每个目标组都部署了一个应用程序。
  • 您将运行服务 A 的 Amazon EC2 实例注册到 target-group-A。对于此目标组,您可以将 HealthCheckProtocol 设置为 HTTP,将 HealthCheckPath 设置为 /svcA
  • 您将运行服务 B 的 Amazon EC2 实例注册到 target-group-B。对于此目标组,您可以将 HealthCheckProtocol 设置为 HTTP,将 HealthCheckPath 设置为 /svcB

您可以随时在目标组中添加或从中移除目标。有关详细信息,请参阅 Register targets with your Application Load Balancer target group

指定目标组后,负载均衡器会持续监控已激活可用区内所有目标的运行状况。负载均衡器会将请求路由到运行状况良好的已注册目标。有关详细信息,请参阅 Health checks for Application Load Balancer target groups

配置侦听器规则

当您为应用程序负载均衡器创建侦听器时,除了默认规则外,您还可以定义一个或多个规则。规则由优先级、操作和一个或多个条件组成。您无法为默认规则定义条件。如果不满足定义的规则的任何条件,则会执行默认规则的操作。

要在应用程序负载均衡器上实施基于路径的路由,必须配置侦听器规则。根据您要将请求路由到的位置为每种路径模式配置一条规则。

侦听器规则示例

以下示例显示了服务 A 和 B 的侦听器规则:

侦听器规则 1: 如果您的请求 URL 路径中包含字符串 /svcA,则将请求转发到 target-group-A。这样做是因为 target-group-A 包含在给定路径上运行应用程序的服务 A。

侦听器规则 2: 如果您的请求 URL 路径中包含字符串 /svcB,则将请求转发到 target-group-B。这样做是因为 target-group-B 包含在给定路径上运行应用程序的服务 B。

要更新侦听器规则的条件和操作,请完成以下步骤:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格中的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。
  3. 选择负载均衡器,然后选择 Listeners and rules(侦听器和规则)。
  4. 要更新侦听器,请选择 Listeners and rules(侦听器和规则)选项卡,然后选择 Protocol:Port(协议:端口)列中的文本,以打开侦听器的详细信息页面。
  5. Rules(规则)选项卡的 Listener rules(侦听器规则)部分中,选择要编辑的规则。
  6. 选择 Actions(操作),然后选择 Edit rule(编辑规则)。
  7. 选择 Add rules(添加规则)。
  8. 根据需要修改名称和标签。要添加其他标签,请选择 Add additional tags(添加其他标签)。
  9. 选择 Next(下一步)。
  10. 要为 /svcA 添加基于路径的规则,请依次选择 Add condition(添加条件)和 Path(路径),然后输入路径模式 /svcA。选择 Confirm(确认)。
  11. 选择 Next(下一步)。
  12. 要添加转发操作,请选择 Routing actions as Forward to target groups(以转发形式将操作路由到目标组),然后在菜单上选择目标组 target-group-A
  13. 选择 Next(下一步)。
  14. 选择适当的优先级。
  15. 查看规则的详细信息和更新后的配置。如果您对自己的选择满意,请选择 Save changes(保存更改)。

对路径 /svcB 重复上述步骤,并进行以下更改:

  • 在步骤 10 中,输入路径模式 /svcB
  • 在步骤 12 中,选择目标组 target-group-B f

有关详细信息,请参阅 Listener rules for your Application Load Balancer

**注意:**基于路径的路由规则会寻找完全匹配的路径。如果您的应用程序需要沿着这些路径进一步路由请求,请在基于路径的路由规则的条件中包含通配符。使用类似于 /svcA*/svcB* 的路径模式,以便在路由请求时考虑到这些路径上的所有文档。

测试基于路径的路由

要测试基于路径的路由,请在 Web 浏览器中复制您的应用程序负载均衡器的 DNS 名称,然后添加 URL 路径 /svcA/svcB

例如,假设您的应用程序负载均衡器使用 alb-demo-1234567890.us-west-2.elb.amazonaws.com 作为 DNS 名称。

  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcA 必须返回服务 A。
  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcB 必须返回服务 B。

当应用程序负载均衡器侦听器收到请求时,侦听器会根据路径条件将该请求转发到相应的目标组。

如果您使用基于路径的路由,则可以在单个应用程序负载均衡器后托管多个微服务。您可以根据侦听器规则和目标组将流量路由到每个服务。您还可以根据主机标头、用户代理标头或查询参数值等条件来路由流量。有关详细信息,请参阅 Advanced Request Routing for AWS Application Load Balancers

相关信息

如何对应用程序负载均衡器运行状况检查失败进行故障排除?

对应用程序负载均衡器进行故障排除