HTTP 作用域路由配置 (proto)
路由 架構概述
config.route.v3.ScopedRouteConfiguration
[config.route.v3.ScopedRouteConfiguration proto]
指定一個路由作用域,將一個 Key 與一個 config.route.v3.RouteConfiguration 關聯起來。config.route.v3.RouteConfiguration 可以透過 RDS 動態取得(route_configuration_name)或以內嵌方式指定(route_configuration)。
HTTP 連線管理器會建立一個由這些 Key 到 RouteConfiguration 的映射組成的表,並根據 scope_key_builder(分配給 HttpConnectionManager)中指定的演算法來查找每個請求要使用的 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, 必要) 分配給路由作用域的名稱。
- route_configuration_name
(string) 用於向 RDS 伺服器發出 service.discovery.v3.DiscoveryRequest 的資源名稱,以取得與此作用域關聯的 config.route.v3.RouteConfiguration。
- route_configuration
(config.route.v3.RouteConfiguration) 與該作用域關聯的 config.route.v3.RouteConfiguration。
- key
(config.route.v3.ScopedRouteConfiguration.Key, 必要) 要比對的鍵。
config.route.v3.ScopedRouteConfiguration.Key
[config.route.v3.ScopedRouteConfiguration.Key proto]
指定一個鍵,該鍵與 HttpConnectionManager 中指定的 scope_key_builder 的輸出進行比對。比對是針對每個 HTTP 請求完成的,並且取決於鍵中包含的片段順序。
{
"fragments": []
}
- fragments
(重複 config.route.v3.ScopedRouteConfiguration.Key.Fragment, 必要) 要比對的片段的有序集合。順序必須與相應的 scope_key_builder 中的片段順序一致。
config.route.v3.ScopedRouteConfiguration.Key.Fragment
[config.route.v3.ScopedRouteConfiguration.Key.Fragment proto]
{
"string_key": ...
}
- string_key
(string, 必要) 要比對的字串。