网址映射概览

Google Cloud HTTP(S) 负载平衡器和 Traffic Director 使用网址映射将请求定向到目的地。配置 HTTP(S) 负载平衡器或 Traffic Director 时,您需要创建一个网址映射。此网址映射根据您定义的规则将流量定向到以下一个或多个目的地:

后端服务表示后端的集合,而后端是应用或微服务的实例。后端存储分区是一个 Google Cloud Storage 存储分区,通常用于托管静态内容(如图片)。

例如,您可以使用单个网址映射根据请求主机和路径来路由请求:

  • 针对 https://example.com/video 的请求转到一个后端服务。
  • 针对 https://example.com/audio 的请求转到其他后端服务。
  • 针对 https://example.com/images 的请求转到 Cloud Storage 后端存储分区。
  • 针对任何其他主机和路径组合的请求转到默认后端服务。

网址映射与以下 Google Cloud 产品结合使用:

网址映射简介

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

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

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

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

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

通过网址映射,您可以设置此类主机和基于路径的路由。

后端服务设置示例(点击放大)
后端服务设置示例(点击放大)

高级流量管理

内部 HTTP(S) 负载平衡和 Traffic Director 使用网址映射进行主机和基于路径的路由(如本文档中所述)。如果与这些产品结合使用,网址映射还支持高级流量管理功能。如需详细了解高级流量管理,请参阅流量管理概览高级流量管理

命名

每个网址映射都有一个名称。当您使用 Google Cloud Console 创建基于 HTTP(S) 的负载平衡器时,系统会为网址映射分配一个名称。此名称与负载平衡器的名称相同。如果您使用 gcloud 或 API,则可以为网址映射自定义一个名称。

网址映射组件

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

  • 主机名是网址的域名部分;例如,网址 http://example.net/video/hd 的主机名部分为 example.net
  • 路径是网址中位于主机名和可选端口号后面的部分;例如,对于网址 http://example.net/video/hd,其路径部分为 /video/hd
带有基本网址映射的负载平衡器配置(点击可放大)。
带有基本网址映射的负载平衡器配置(点击可放大)

此图展示了彼此相关的负载平衡配置对象的结构。

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

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

  • 主机规则。主机规则会将发送到一个或多个关联主机名的请求定向到单个路径匹配器。网址的主机名部分应与主机规则中配置的一组主机名完全匹配。如需将对 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 都匹配。

    • 端口号。您还可以使用主机规则参数指定端口号。例如,要定向对端口 8080 的 example.net 请求,请将主机规则设置为 example.net:8080
  • 路径匹配器。路径匹配器是供主机规则引用的配置参数。它定义了网址的路径部分与应处理请求的后端服务或后端存储分区之间的关系。路径匹配器由以下两个元素组成:

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

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

操作顺序

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

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

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

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

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

    • 如果以上两个条件都不满足,则 Google Cloud 会将请求定向到路径匹配器的默认后端服务或默认后端存储分区,具体取决于您之前定义的设置。

路径匹配器限制条件

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

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

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

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

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

  • Google Cloud 使用网址的主机名部分来选择单个主机规则及其引用的路径匹配器。

  • 在路径匹配器中,您不能为同一路径创建多个路径规则。例如,对 /videos/hd 的请求不能定向到多个后端服务或后端存储分区。后端服务的后端实例组或后端网络端点组 (NEG) 可以分布在不同的区域和地区,您可以创建使用 Multi-Regional 存储类别的后端存储分区。

网址映射和协议

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

您可以使用网址映射来配置重定向,如以下指南所示:

最简单的网址映射

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

如果您定义了默认后端服务,则 Google Cloud 会根据该后端服务的配置将请求定向到其后端实例组或后端 NEG。

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

网址映射示例

以下示例演示了网址映射的操作顺序。为便于理解概念,该示例仅使用了后端服务;不过,您可以改用后端存储分区。以下步骤演示了如何为外部 HTTP(S) 负载平衡器配置网址映射。如需查看如何创建外部 HTTP(S) 负载平衡器的其他组件的示例,请参阅创建外部 HTTP(S) 负载平衡器。如需查看如何创建内部 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 网址映射按以下方式将请求的网址定向到后端。

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

下表说明了上图中显示的请求处理。

主机名 网址路径 选定后端服务 选择原因
主机名:
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 后端服务。

API 和 gcloud 参考

如需了解通过 REST API 使用 URL 映射时可用的属性和方法的说明,请参阅以下内容:

对于 gcloud 命令行工具,请参阅以下内容:

后续步骤