网址映射概念

Google Cloud Platform HTTP(S) 负载平衡器使用网址映射将传入请求定向到后端服务后端存储分区

您创建的每个 HTTP(S) 负载平衡器都必须具有一个网址映射。使用 GCP Console 创建 HTTP(S) 负载平衡器时,负载平衡器的名称与其网址映射是相同的。每个网址映射都会将流量定向到默认后端服务或默认后端存储分区。除了此默认设置之外,您还可以根据请求的主机名和网址的路径部分,将流量定向到不同的后端服务和后端存储分区。

例如,您可以将针对 https://example.com/videohttps://example.com/audio 的请求分别路由到不同的后端服务,并将针对 https://example.com/graphics 的请求路由到一个 Cloud Storage 后端存储分区,所有这些路由操作都是通过一个网址映射和 HTTP(S) 负载平衡器完成的。

在阅读本文之前,请务必先熟悉整体 HTTP(S) 负载平衡概念。

本文介绍了网址映射如何与 HTTP(S) 负载平衡器协同工作。Traffic Director 是 GCP 专为服务网格打造的全托管式流量控制平面,它使用网址映射并支持其他配置参数。如需详细了解这些参数,请参阅 Traffic Director 文档

网址映射简介

当一个请求到达负载平衡器时,负载平衡器会根据网址映射中的配置将该请求路由到特定的后端服务或后端存储分区。

例如,假设您采用以下设置:

  • 一个 IP 地址。向您的组织发出的所有请求都会转到相同 IP 地址和相同负载平衡器。根据请求网址,流量会被定向至不同的后端服务。
  • 两个网域
    • example.net:用于托管培训视频
    • example.org:用于托管贵组织的网站
  • 四组服务器
    • 一组服务器用于托管贵组织的网站(后端服务:org-site
    • 一组服务器用于托管整个培训视频网站(后端服务:video-site
    • 一组服务器用于托管高清 (HD) 培训视频(后端服务:video-hd
    • 一组服务器用于托管标清 (SD) 培训视频(后端服务:video-sd

您希望按如下方式路由请求:

  • 将向 example.org(或 example.org 以外的其他任何网域)发出的请求转到 org-site 后端服务
  • 将向 example.net 发出且没有更具体匹配路径的请求转到 video-site 后端服务
  • 将向 example.net/video/hd/* 发出的请求转到 video-hd 后端服务
  • 将向 example.net/video/sd/* 发出的请求转到 video-sd 后端服务
服务设置示例(点击放大)
服务设置示例(点击放大)

您可以创建一个网址映射来实现上述设置。下一部分介绍了您将会用到的一些网址映射组件。

网址映射组件

网址映射是一种 GCP 配置资源,可将对网址的请求定向到后端服务或后端存储分区。为此,它会使用其所处理的每个网址的主机名和路径部分:

  • 主机名:主机名是网址的域名部分;例如,对于网址 http://example.net/video/hd,其主机名部分为 example.net
  • 路径:路径是网址中位于主机名后面的部分;例如,对于网址 http://example.net/video/hd,其路径部分为 /video/hd

您可以使用以下网址映射配置参数来控制接收传入请求的后端服务或后端存储分区:

基本网址映射流程(点击放大)
基本网址映射流程(点击放大)
  • 默认服务默认后端存储分区:创建网址映射时,您必须指定默认后端服务或默认后端存储分区,但不能同时指定两者。在没有适用的主机规则的情况下,GCP 会将对包含任何主机名的网址的请求定向到这个默认后端服务或存储分区。

  • 主机规则:主机规则会将发送到一个或多个关联主机名的请求定向到单个路径匹配器。网址的主机名部分应与主机规则中配置的一组主机名完全匹配。要将对 http://example.net/video/hd 的请求定向到路径匹配器,您需要一个至少包含主机名 example.net 的主机规则。该主机规则还可以处理对其他主机名的请求,但它会将这些请求定向到同一路径匹配器。如果您需要将请求定向到其他路径匹配器,必须使用不同的主机规则。网址映射中的两个主机规则不能包含相同主机名。您可以对所有主机名进行匹配,只需在主机规则中指定通配符 * 即可。例如,对于网址 http://example.orghttp://example.net/video/hdhttp://example.com/audio,在主机规则中指定 * 即可对所有三个主机名(即 example.orgexample.netexample.com)进行匹配。此外,也可以通过指定通配符 * 对部分主机名进行匹配。例如,主机规则 *.example.net 与主机名 foo.example.netbar.example.net 都匹配。

  • 路径匹配器:路径匹配器是供主机规则引用的配置参数。它定义了网址的路径部分与应处理请求的后端服务或后端存储分区之间的关系。路径匹配器由以下两个元素组成:

    • 路径匹配器默认服务路径匹配器默认后端存储分区:对于每个路径匹配器,您必须至少指定默认后端服务或默认后端存储分区,但不能同时指定两者。如果网址的主机名与路径匹配器的关联主机规则相匹配,网址路径与路径匹配器中的任何路径规则都匹配,那么 GCP 会将对此类网址的请求定向到这个默认后端服务或存储分区。

    • 路径规则:路径规则采用键值对形式,用于将网址路径映射到单个后端服务或后端存储分区,您可以为每个路径匹配器指定一个或多个路径规则。下一部分(操作顺序)详细介绍了路径规则原理。

操作顺序

根据请求网址中的指定主机名和路径,GCP 会使用以下过程将请求定向到网址映射中配置的相应后端服务或后端存储分区:

  • 如果网址映射包含与该网址的主机名对应的主机规则,那么 GCP 会将请求定向至网址映射的默认后端服务或默认后端存储分区,具体取决于您之前定义的设置。

  • 如果网址映射包含与该网址的主机名对应的主机规则,那么系统会查询该主机规则引用的路径匹配器:

    • 如果路径匹配器包含与该网址的路径完全匹配的路径规则,则 GCP 会将请求定向至该路径规则对应的后端服务或后端存储分区。

    • 如果路径匹配器包含与该网址的路径完全匹配的路径规则,但确实包含以 /* 结尾且其前缀与该网址路径的最长部分匹配的路径规则,那么 GCP 会将请求定向至该路径规则对应的后端服务或后端存储分区。例如,对于包含 /video/hd/movie1/video/hd/* 两个路径匹配器规则的网址映射,如果网址包含 /video/hd/movie1 这一确切路径,那么它与该路径规则匹配。

    • 如果以上两个条件都不满足,则 GCP 会根据您定义的设置将请求定向到路径匹配器的默认后端服务或默认后端存储分区。

路径匹配器限制

路径匹配器和路径规则具有以下限制:

  • 在路径规则中,只能在正斜杠字符 (/) 后面添加通配符 (*)。例如,/videos/*/videos/hd/* 是有效的路径规则,但 /videos*/videos/hd* 不是有效的路径规则。

  • 路径规则不使用正则表达式或子字符串匹配。例如,/videos/hd/videos/hd/* 路径规则不适用于路径为 /video/hd-abcd 的网址。不过,/video/* 路径规则适用于该路径。

  • 路径匹配器(以及一般网址映射)不会提供类似于 Apache LocationMatch 指令的功能。如果您的应用生成具有通用前缀的动态网址路径(例如 /videos/hd-abcd/videos/hd-pqrs),并且您需要将向这些路径发出的请求发送到不同的后端服务,您可能无法通过网址映射来实现此目的。对于仅包含几个可能动态网址的简单用例,您可能可以使用一组有限的路径规则来创建路径匹配器。对于较为复杂的用例,您将需要在后端虚拟机上执行基于路径的正则表达式匹配。

主机名只能引用单个主机规则,主机规则也只能引用单个路径匹配器。但是,单个主机规则可以处理多个主机名,单个路径匹配器也可由多个主机规则引用。因此,每个唯一网址都将仅定向到一个后端服务或后端存储分区:

  • GCP 使用网址的主机名部分来选择单个主机规则及其引用的路径匹配器。
  • 在路径匹配器中,您不能为同一路径创建多个路径规则。例如,对 /videos/hd 的请求不能定向到多个后端服务或后端存储分区。请注意,后端服务的后端实例组或后端网络端点组可以分布在不同的地区和区域,您可以创建使用 Multi-Regional 存储类别的后端存储分区。

网址映射和协议

您可以使用相同的网址映射、主机规则和路径匹配器来处理客户端提交的 HTTP 和 HTTPS 请求,前提是目标 HTTP 代理和目标 HTTPS 代理都引用了该网址映射。

网址映射不会为客户端与负载平衡器之间的连接提供协议重定向。例如,您不能使用网址映射来指示客户端系统从 HTTP 切换为 HTTPS。您必须在后端虚拟机上实现所有客户端协议重定向。

最简单的网址映射

最简单的网址映射只有一项默认后端服务或一个默认后端存储分区。该网址映射不包含主机规则,也不包含路径匹配器。无论您定义的设置为何,所有请求的网址均由默认后端服务或默认后端存储分区处理。

如果您定义了默认后端服务,GCP 会根据该后端服务的配置将请求定向到其后端实例组或后端网络端点组。

只有默认服务、不含任何规则的网址映射(点击放大)
只有默认服务、不含任何规则的网址映射(点击放大)

网址映射示例

以下示例演示了网址映射的操作顺序。为便于理解概念,该示例仅使用了后端服务;不过,您可以改用后端存储分区。

以下步骤演示了如何为 GCP HTTP(S) 负载平衡器配置网址映射。如需查看有关如何创建 HTTP(S) 负载平衡器的其他组件的示例,请参阅创建基于内容的跨区域负载平衡。本示例中讨论的每个后端服务都采用外部方案,并使用 HTTP、HTTPS 或 HTTP/2 协议。

  1. 为负载平衡器创建网址映射,并指定默认后端服务。本示例创建了网址映射 video-org-url-map,它引用现有后端服务 org-site

    gcloud compute url-maps create video-org-url-map \
        --default-service=org-site
    
  2. 创建具有以下特征的路径匹配器 video-matcher

    • 默认后端服务为 video-site(现有的一项后端服务)。
    • 添加相关路径规则,将对确切网址路径 /video/hd 或带有前缀 /video/hd/* 的网址路径的请求定向至现有后端服务 video-hd
    • 添加相关路径规则,将对确切网址路径 /video/sd 或带有前缀 /video/sd/* 的网址路径的请求定向至现有后端服务 video-sd
    gcloud compute url-maps add-path-matcher video-org-url-map \
        --path-matcher-name=video-matcher \
        --default-service=video-site \
        --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd
    
  3. 为引用 video-matcher 路径匹配器的 example.net 主机名创建主机规则。

    gcloud compute url-maps add-host-rule video-org-url-map \
        --hosts=example.net \
        --path-matcher-name=video-matcher
    

video-org-url-map 网址映射按以下方式将请求的网址定向到后端:

包含路径规则、路径匹配器和主机规则的网址映射(点击放大)
包含路径规则、路径匹配器和主机规则的网址映射(点击放大)

GCP 会依照下表所示处理对网址的请求:

主机名 网址路径 选定后端服务 选择原因
主机名
example.org 及除以下主机名外的其他所有主机名:
example.net
所有路径 org-site 该主机名不包含在网址映射的任何主机规则中,因此请求会被定向到网址映射的默认后端服务。
主机名
example.net
/video
/video/examples
video-site 由于没有针对 /video//video/* 的路径规则,因此请求会转到默认后端服务。针对 example.net 的主机规则引用一个路径匹配器,但该路径匹配器没有适用于这些路径的任何路径规则。
主机名
example.net
/video/hd
/video/hd/movie1
/video/hd/movies/movie2
/video/hd/* 开头的其他网址
video-hd 针对 example.net 的主机规则引用一个路径匹配器,该路径匹配器的路径规则会将发送到与 /video/hd 完全匹配或以 /video/hd/* 开头的网址路径的请求定向至 video-hd 后端服务。
主机名
example.net
/video/sd
/video/sd/show1
/video/sd/shows/show2
/video/sd/* 开头的其他网址
video-sd 针对 example.net 的主机规则引用一个路径匹配器,该路径匹配器的路径规则会将发送到与 /video/sd 完全匹配或以 /video/sd/* 开头的网址路径的请求定向至 video-sd 后端服务。

** 补充说明

Traffic Director 文档中介绍的某些网址映射功能不适用于负载平衡器。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
负载平衡