如何在 Application Load Balancer 上实现基于路径的路由?

2 分钟阅读
0

我的 Application Load Balancer 后面运行了多个微服务。我想要根据 URL 路径将请求转发到特定目标组。

简短描述

通过 Application Load Balancer,您可以创建一个侦听器,其中包含根据 URL 将请求转发到目标组的规则。此功能不适用于其他负载均衡器类型,例如 Classic Load Balancer、Network Load Balancer 和 Gateway Load Balancer。路径模式规则仅应用于 URL 的路径,而不应用于 URL 的查询参数。有关路径模式的更多信息,请参阅路径条件

要在 Application Load Balancer 上建立基于路径的路由,请执行以下操作:

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

在创建目标组之前,请确保满足以下先决条件:

解决方法

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

创建目标组

创建实例后,将这些实例注册到目标组。根据在负载均衡器上配置的侦听器规则,使用您为目标组指定的端口和协议将请求转发到已注册的目标。但是,在单独注册目标时,您可以覆盖端口信息。有关更多信息,请参阅创建目标组

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

将运行服务 B 的 EC2 实例注册到 target-group-B。对于此目标组,您可以将 HealthCheckProtocol 设置为 HTTP,将 HealthCheckPath 设置为 /svcB

您可以随时在目标组中添加目标或从目标组中移除目标。有关更多信息,请参阅向目标组注册目标

在规则中为侦听器指定目标组后,负载均衡器会持续监控在为负载均衡器启用的可用区中向目标组注册的所有目标的运行状况。负载均衡器会将请求路由到运行状况良好的已注册目标。有关更多信息,请参阅目标组的运行状况检查

配置侦听器规则

当您为 Application Load Balancer 创建侦听器时,除了默认规则之外,还可以定义一个或多个规则。规则由优先级、操作以及一个或多个条件组成。您不能为默认规则定义条件。如果不满足任何非默认规则的条件,则会执行默认规则的操作。

要了解有关规则优先级的更多信息,请参阅对规则进行重新排序

要了解有关规则操作的更多信息,请参阅规则操作类型

要了解有关规则条件的更多信息,请参阅规则条件类型

要在 Application Load Balancer 上实施基于路径的路由,必须配置侦听器规则。您必须根据希望路由请求的路径模式为每个路径模式配置一个规则。

例如:

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

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

要创建新的 HTTP 侦听器,请参阅创建 HTTP 侦听器

要创建新的 HTTPS 侦听器,请参阅创建 HTTPS 侦听器

要使用条件和操作更新侦听器规则,请执行以下操作:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格中,选择 Load Balancing(负载均衡)下的 Load Balancers(负载均衡器)。
  3. 选择负载均衡器,然后选择 Listeners(侦听器)。
  4. 要更新侦听器,请选择 View/edit rules(查看/编辑规则)。
  5. 选择菜单栏中的 Add rules(添加规则)图标(加号)。这将在可以按优先级顺序插入规则的位置添加 Insert Rule(插入规则)图标。
  6. 选择在上一步中添加的 Insert Rule(插入规则)图标之一。
  7. 要为 /svcA 添加基于路径的规则,请选择 Add condition, Path(添加条件、路径),然后 输入路径模式 /svcA。要保存该条件,请选择复选标记图标。
  8. 要添加转发操作,请选择 Add action, Forward to(添加操作、转发至),然后选择目标组 target-group-A
  9. 选择 Save(保存)。

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

  • 对于步骤 6,请输入路径模式 /svcB
  • 对于步骤 7,选择目标组 target-group-B

有关更多信息,请参阅 Application Load Balancer 的侦听器规则

**注意:**基于路径的路由规则将寻找精确的匹配。在此示例中,基于路径的路由使用路径定义 /svcA 和 /svcB。如果您的应用程序需要沿着这些路径进一步路由请求,例如 /svcA/doc 或 /svcB/doc,则在为基于路径的路由规则编写条件时包含通配符。使用类似于 /svcA*/svcB* 的路径模式,以确保在路由请求时考虑到这些路径上的任何文档。

测试基于路径的路由

要测试此路由,请在 Web 浏览器中复制 Application Load Balancer 的 DNS 名称,然后添加 URL 路径 /svcA/svcB。当 Application Load Balancer 侦听器收到请求时,侦听器会根据路径条件将该请求转发到相应的目标组。

例如,假设您的 Application Load Balancer 的 DNS 名称是 alb-demo-1234567890.us-west-2.elb.amazonaws.com

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

通过基于路径的路由,Application Load Balancer 允许您使用侦听器规则和目标组在单个负载均衡器后面托管多个微服务。因此,您可以设置复杂规则,以便将客户端请求路由至您的应用程序。除了基于路径的规则外,您还可以根据主机标头、用户代理标头和查询参数值将请求路由到特定的应用程序。有关更多信息,请参阅 AWS Application Load Balancer 的高级请求路由


相关信息

如何对失败的 Application Load Balancers 运行状况检查执行问题排查和修复?

排查 Application Load Balancer 问题

相关视频

AWS 官方
AWS 官方已更新 2 年前