HTTP 范围路由配置 (proto)

config.route.v3.ScopedRouteConfiguration

[config.route.v3.ScopedRouteConfiguration proto]

指定一个路由范围,将 Keyconfig.route.v3.RouteConfiguration 关联。可以通过 RDS 动态获取 config.route.v3.RouteConfiguration (route_configuration_name),也可以内联指定 (route_configuration)。

HTTP 连接管理器构建一个由这些 Key 到 RouteConfiguration 映射组成的表,并根据分配给 HttpConnectionManager 的 scope_key_builder 中指定的算法,根据每个请求查找要使用的 RouteConfiguration。

例如,使用以下配置(在 YAML 中)

HttpConnectionManager 配置

...
scoped_routes:
  name: foo-scoped-routes
  scope_key_builder:
    fragments:
      - header_value_extractor:
          name: X-Route-Selector
          element_separator: ","
          element:
            separator: =
            key: vip

ScopedRouteConfiguration 资源(通过 scoped_route_configurations_list 静态指定,或通过 SRDS 动态获取)

(1)
 name: route-scope1
 route_configuration_name: route-config1
 key:
    fragments:
      - string_key: 172.10.10.20

(2)
 name: route-scope2
 route_configuration_name: route-config2
 key:
   fragments:
     - string_key: 172.20.20.30

来自客户端的请求,例如

GET / HTTP/1.1
Host: foo.com
X-Route-Selector: vip=172.10.10.20

将导致 route-config1 RouteConfiguration 定义的路由表被分配给 HTTP 请求/流。

{
  "on_demand": ...,
  "name": ...,
  "route_configuration_name": ...,
  "route_configuration": {...},
  "key": {...}
}
on_demand

(bool) 是否应按需加载 RouteConfiguration。

name

(string, REQUIRED) 分配给路由范围的名称。

route_configuration_name

(string) 用于 service.discovery.v3.DiscoveryRequest 的资源名称,以获取与该范围关联的 RDS 服务器的 config.route.v3.RouteConfiguration

route_configuration

(config.route.v3.RouteConfiguration) 与该范围关联的 config.route.v3.RouteConfiguration

key

(config.route.v3.ScopedRouteConfiguration.Key, REQUIRED) 要匹配的键。

config.route.v3.ScopedRouteConfiguration.Key

[config.route.v3.ScopedRouteConfiguration.Key proto]

指定一个键,该键与 HttpConnectionManager 中指定的 scope_key_builder 的输出相匹配。匹配是在每个 HTTP 请求上完成的,并且取决于 Key 中包含的片段的顺序。

{
  "fragments": []
}
fragments

(repeated config.route.v3.ScopedRouteConfiguration.Key.Fragment, REQUIRED) 要匹配的片段的排序集。顺序必须与相应的 scope_key_builder 中的片段相匹配。

config.route.v3.ScopedRouteConfiguration.Key.Fragment

[config.route.v3.ScopedRouteConfiguration.Key.Fragment proto]

{
  "string_key": ...
}
string_key

(string, REQUIRED) 要匹配的字符串。