HTTP scoped routing configuration

config.route.v3.ScopedRouteConfiguration

[config.route.v3.ScopedRouteConfiguration proto]

Specifies a routing scope, which associates a Key to a config.route.v3.RouteConfiguration (identified by its resource name).

The HTTP connection manager builds up a table consisting of these Key to RouteConfiguration mappings, and looks up the RouteConfiguration to use per request according to the algorithm specified in the scope_key_builder assigned to the HttpConnectionManager.

For example, with the following configurations (in YAML):

HttpConnectionManager config:

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

ScopedRouteConfiguration resources (specified statically via scoped_route_configurations_list or obtained dynamically via 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

A request from a client such as:

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

would result in the routing table defined by the route-config1 RouteConfiguration being assigned to the HTTP request/stream.

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

(bool) Whether the RouteConfiguration should be loaded on demand.

name

(string, REQUIRED) The name assigned to the routing scope.

route_configuration_name

(string, REQUIRED) The resource name to use for a service.discovery.v3.DiscoveryRequest to an RDS server to fetch the config.route.v3.RouteConfiguration associated with this scope.

key

(config.route.v3.ScopedRouteConfiguration.Key, REQUIRED) The key to match against.

config.route.v3.ScopedRouteConfiguration.Key

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

Specifies a key which is matched against the output of the scope_key_builder specified in the HttpConnectionManager. The matching is done per HTTP request and is dependent on the order of the fragments contained in the Key.

{
  "fragments": []
}
fragments

(repeated config.route.v3.ScopedRouteConfiguration.Key.Fragment, REQUIRED) The ordered set of fragments to match against. The order must match the fragments in the corresponding scope_key_builder.

config.route.v3.ScopedRouteConfiguration.Key.Fragment

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

{
  "string_key": "..."
}
string_key

(string, REQUIRED) A string to match against.