HTTP 范围路由配置 (proto)
路由 架构概述
config.route.v3.ScopedRouteConfiguration
[config.route.v3.ScopedRouteConfiguration proto]
指定一个路由范围,将 Key 与 config.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) 要匹配的字符串。