配置路线扩展服务

借助 Service Extensions,受支持的应用负载平衡器可以使用插件或向后端服务发送标注,以便在处理路径中插入自定义处理。 当负载均衡器收到请求标头时,并在评估 网址映射之前,路由扩展程序会在请求处理路径中运行。本页介绍了如何配置路由扩展。

如需大致了解应用负载平衡器扩展程序,请参阅 Cloud Load Balancing 扩展程序概览

应用负载平衡器的路由扩展指向以下资源:

  • 要附加到的转发规则
  • 插件或调用后端服务,其后端运行 ext_proc gRPC API

路由扩展程序将相关的扩展服务分组到一个链中。您可以在同一扩展链中配置插件和调用。扩展程序链使用通用表达式语言 (CEL) 匹配条件来选择要处理的流量。负载均衡器会按顺序针对链中的匹配条件评估请求。当请求符合链定义的条件时,链中的所有扩展程序都会对该请求执行操作。只有一条链与给定的请求匹配。

扩展程序引用要附加到的负载均衡器转发规则。 配置资源后,负载均衡器会开始向扩展服务发送匹配的请求。

如需了解与应用负载平衡器扩展相关的限制,请参阅配额和限制页面。

使用插件进行配置

本部分通过一个示例向您展示如何配置路由扩展程序,以使用插件在路径与 /extensions 匹配时将 :host 请求标头重写为 service-extensions.com。之前的主机和新配置的主机映射到不同区域中的后端服务,这展示了路由行为。

引用给定插件的所有扩展资源必须具有相同的类型。 扩展程序还必须采用相同的负载均衡方案。您无法使用已在媒体 CDN 扩展程序中使用的插件来配置 Cloud Load Balancing 扩展程序。

准备工作

  1. 创建包含自定义代码的插件。

  2. 创建并配置支持路由扩展插件的应用负载平衡器

    按照设置具有虚拟机实例组后端的跨区域内部应用负载平衡器页面上的说明完成所有步骤,但以下步骤除外:

    • 将后端服务命名为 service-one
    • service-one 指向区域 A 中的虚拟机 (VM) 实例。
    • 默认情况下,将 gl7-gilb-url-map 指向 service-one
  3. 设置另一个后端服务 service-two,并将其指向区域 B 中的虚拟机。

  4. 向网址映射添加指向 service-two 的路径匹配器。使用 gcloud compute url-maps add-path-matcher 命令,并提供以下示例值:

      gcloud compute url-maps add-path-matcher gl7-gilb-url-map \
          --path-matcher-name=rewrite-host \
          --default-service=service-two \
          --new-hosts=service-extensions.com \
          --location=global
    
  5. 设置一种向服务发送测试请求的方式(例如,通过运行 curl)。如果您使用的是内部负载均衡器,请创建用于测试的客户端虚拟机

使用插件配置路线扩展服务

  1. 检查配置扩展程序之前的行为。

    1. 验证没有明确路径的请求是否会发送到区域 A

      curl FORWARDING_RULE_IP
      

      FORWARDING_RULE_IP 替换为转发规则的 IP 地址。如需查找 IP 地址,请使用 gcloud compute forwarding-rules describe 命令

      输出类似于以下内容,表明网页是从 region A 中的虚拟机提供的:

      Page served from region-A-vm
      
    2. 验证网址映射中是否没有与 /extensions 匹配的项:

      curl FORWARDING_RULE_IP/extensions
      

      FORWARDING_RULE_IP 替换为转发规则的 IP 地址。如需查找 IP 地址,请使用 gcloud compute forwarding-rules describe 命令

      输出表明网址映射中没有与 /extensions 匹配的项。输出类似于以下内容:

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>404 Not Found</title>
      </head><body>
      ...
      
  2. 配置路线扩展服务。

    控制台

    1. 在 Google Cloud 控制台中,前往Service Extensions页面。

      前往 Service Extensions

    2. 点击创建扩展程序

      系统会打开一个向导,引导您完成一些初始步骤。

    3. 对于产品,选择负载均衡。然后,点击继续

      系统会显示支持的应用负载平衡器列表。

    4. 对于负载均衡器类型,请选择跨区域内部应用负载均衡器。 然后,点击继续

    5. 对于扩展程序类型,选择路线扩展程序,然后点击继续

    6. 如需打开创建扩展程序表单,请点击继续

      创建附加信息表单中,请注意页面顶部显示的前述选择内容无法修改。

    7. 基本信息部分中,执行以下操作:

      1. 为扩展程序指定一个唯一名称。

        名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。

      2. 可选:输入简短的扩展程序说明,最多可输入 1,024 个字符。

    8. 可选:在标签部分中,点击添加标签。然后,在显示的行中,执行以下操作:

      • 中,输入键名称。
      • 对于,输入该键的值。

      如需添加更多键值对,请点击添加标签。您最多可以添加 64 个键值对。

      如需详细了解标签,请参阅为项目创建和更新标签

    9. 转发规则字段中,选择要与分机号码关联的一条或多条转发规则,例如 cr-ilb-forwarding-rule

      已与其他扩展程序相关联的转发规则无法选择,并且会显示为已停用。

    10. 对于扩展程序,如需添加要针对匹配请求执行的扩展程序,请执行以下操作:

      • 若要匹配执行扩展程序链的请求,请为匹配条件指定通用表达式语言 (CEL) 表达式,例如 request.path.startsWith("/extensions")

        如需详细了解 CEL 表达式,请点击获取语法帮助或参阅 CEL 匹配器语言参考文档

      • 对于可编程性类型,选择插件

      • 对于插件,请选择使用 Service Extensions 创建的插件,该插件具有相同的产品和扩展程序类型。

      • 对于转发属性,请选择您希望负载均衡器转发给 Wasm 插件的请求、连接和位置属性。您可以为每个扩展程序配置最多 16 个属性。如需了解详情,请参阅支持的属性

      • 对于转发标头,点击添加标头,然后添加要转发到扩展程序的 HTTP 标头(来自客户端或后端)。如果未指定标头,则系统会发送所有标头。

      • 可选:如果扩展服务超时或失败,并且您希望继续处理请求或响应,请为故障开放选择已启用

        默认情况下,系统未选择故障时打开选项。在这种情况下,如果发生错误,请求或响应处理会停止。如果响应标头尚未传递给下游客户端,系统会向客户端返回通用 HTTP 500 状态代码。如果响应标头已传递,则会重置到客户端的 HTTP 数据流。

        如果优先考虑安全性或完整性,建议保留默认选项,即不选择应急开启。启用故障开放(尤其是对于非关键操作)有助于优先考虑可用性。

      如果您想指定多个扩展服务或扩展服务链,而不是单个扩展服务,请点击表单末尾的切换到高级模式按钮,然后指定所需的扩展服务和链。扩展程序按列出的顺序运行。

      为每个扩展程序和扩展程序链指定唯一名称。名称必须符合 RFC-1034 的要求,仅限使用小写字母、数字和连字符,且长度上限为 63 个字符。此外,第一个字符必须是字母,最后一个字符必须是字母或数字。

    11. 点击创建扩展程序

    gcloud

    1. 在 YAML 文件中定义插件,并将其与全局转发规则(例如 cr-ilb-forwarding-rule)相关联。

      cat >route-plugin.yaml <<EOF
          name: route-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/cr-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.path.startsWith("/extensions")'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - REQUEST_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      替换以下内容:

      • PROJECT_ID项目 ID
      • REGION:转发规则的区域。该值必须与为插件位置指定的值一致。
      • LOCATION:插件的位置,可以是 global 或区域。
      • WASM_PLUGIN:插件的 ID 或完全限定名称。

      如需详细了解 YAML 文件中的字段,请参阅 API 文档中的 ExtensionChain

      借助 forwardAttributes 字段,您可以指定要转发到 Wasm 插件的请求、连接和位置属性。您可以为每个扩展程序配置最多 16 个属性。如需详细了解支持的属性,请参阅支持的属性

    2. 导入路线扩展程序。使用 gcloud service-extensions lb-route-extensions import 命令和以下示例值。

      gcloud service-extensions lb-route-extensions import route-ext \
          --source=route-plugin.yaml \
          --location=global
      

    创建路线扩展服务后,新插件需要一段时间才能分发到所有位置。由于插件并非同时交付到所有地区,因此时间可能会因地区而异。

  3. 如需验证路由扩展程序是否按预期工作,请使用相同的 curl 命令:

    curl FORWARDING_RULE_IP/extensions
    

    输出类似于以下内容,表明网页是从 region B 中的虚拟机提供的:

    Page served from region-B-vm
    

    如需验证插件是否仅针对具有 /extension 路径前缀的请求运行,请重复执行 curl 命令,但不指定路径。

    curl FORWARDING_RULE_IP
    

    输出类似于以下内容:

    Page served from region-A-vm
    

使用宣传信息进行配置

本部分介绍如何使用调出来配置路线扩展服务。

准备工作

按照配置插播广告后端服务中的说明创建所需资源。

使用宣传信息配置路线扩展信息

以下示例展示了如何配置在路径与 /extensions 匹配时调用的路由扩展程序。callout-vm 中的路由调用服务器将 Host 标头更改为 service-extensions.com,将路径设置为 /,然后向负载均衡器发送指令以重新计算路由。然后,流量会流向 l7-ilb-backend-service2 而不是 l7-ilb-backend-service

  1. 检查网址映射中是否存在与 /extensions 匹配的项。