-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
router: scoped rds (2a): scoped routing configuration protos (#6675)
Protos to statically and dynamically (via the Scoped Route Discovery Service) configure scoped routing logic in Envoy. Signed-off-by: Andres Guedez <aguedez@google.com>
- Loading branch information
1 parent
4b0ba22
commit 2778c3c
Showing
7 changed files
with
289 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
syntax = "proto3"; | ||
|
||
package envoy.api.v2; | ||
|
||
option java_outer_classname = "SrdsProto"; | ||
option java_package = "io.envoyproxy.envoy.api.v2"; | ||
option java_multiple_files = true; | ||
option java_generic_services = true; | ||
|
||
import "envoy/api/v2/discovery.proto"; | ||
|
||
import "google/api/annotations.proto"; | ||
|
||
import "validate/validate.proto"; | ||
import "gogoproto/gogo.proto"; | ||
|
||
option (gogoproto.equal_all) = true; | ||
|
||
// [#protodoc-title: HTTP scoped routing configuration] | ||
// * Routing :ref:`architecture overview <arch_overview_http_routing>` | ||
// | ||
// .. attention:: | ||
// | ||
// The Scoped RDS API is not yet fully implemented and *should not* be enabled in | ||
// :ref:`envoy_api_msg_config.filter.network.http_connection_manager.v2.HttpConnectionManager`. | ||
// | ||
// TODO(AndresGuedez): Update :ref:`arch_overview_http_routing` with scoped routing overview and | ||
// configuration details. | ||
|
||
// The Scoped Routes Discovery Service (SRDS) API distributes | ||
// :ref:`ScopedRouteConfiguration<envoy_api_msg.ScopedRouteConfiguration>` resources. Each | ||
// ScopedRouteConfiguration resource represents a "routing scope" containing a mapping that allows | ||
// the HTTP connection manager to dynamically assign a routing table (specified via | ||
// a :ref:`RouteConfiguration<envoy_api_msg_RouteConfiguration>` message) to each HTTP request. | ||
// [#proto-status: experimental] | ||
service ScopedRoutesDiscoveryService { | ||
rpc StreamScopedRoutes(stream DiscoveryRequest) returns (stream DiscoveryResponse) { | ||
} | ||
|
||
rpc DeltaScopedRoutes(stream DeltaDiscoveryRequest) returns (stream DeltaDiscoveryResponse) { | ||
} | ||
|
||
rpc FetchScopedRoutes(DiscoveryRequest) returns (DiscoveryResponse) { | ||
option (google.api.http) = { | ||
post: "/v2/discovery:scoped-routes" | ||
body: "*" | ||
}; | ||
} | ||
} | ||
|
||
// Specifies a routing scope, which associates a | ||
// :ref:`Key<envoy_api_msg_ScopedRouteConfiguration.Key>` to a | ||
// :ref:`envoy_api_msg_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 | ||
// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>` | ||
// assigned to the HttpConnectionManager. | ||
// | ||
// For example, with the following configurations (in YAML): | ||
// | ||
// HttpConnectionManager config: | ||
// | ||
// .. code:: | ||
// | ||
// ... | ||
// 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 | ||
// :ref:`scoped_route_configurations_list<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scoped_route_configurations_list>` | ||
// or obtained dynamically via SRDS): | ||
// | ||
// .. code:: | ||
// | ||
// (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: | ||
// | ||
// .. code:: | ||
// | ||
// 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. | ||
// | ||
// [#comment:next free field: 4] | ||
// [#proto-status: experimental] | ||
message ScopedRouteConfiguration { | ||
// The name assigned to the routing scope. | ||
string name = 1 [(validate.rules).string.min_bytes = 1]; | ||
|
||
// Specifies a key which is matched against the output of the | ||
// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.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. | ||
message Key { | ||
message Fragment { | ||
oneof type { | ||
option (validate.required) = true; | ||
|
||
// A string to match against. | ||
string string_key = 1; | ||
} | ||
} | ||
|
||
// The ordered set of fragments to match against. The order must match the fragments in the | ||
// corresponding | ||
// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>`. | ||
repeated Fragment fragments = 1 [(validate.rules).repeated .min_items = 1]; | ||
} | ||
|
||
// The resource name to use for a :ref:`envoy_api_msg_DiscoveryRequest` to an RDS server to | ||
// fetch the :ref:`envoy_api_msg_RouteConfiguration` associated with this scope. | ||
string route_configuration_name = 2 [(validate.rules).string.min_bytes = 1]; | ||
|
||
// The key to match against. | ||
Key key = 3 [(validate.rules).message.required = true]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,4 +6,5 @@ HTTP route management | |
:maxdepth: 2 | ||
|
||
../api/v2/rds.proto | ||
../api/v2/srds.proto | ||
../api/v2/route/route.proto |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters