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, 必要) 要比對的字串。