ratelimit: add route entry metadata to ratelimit actions (#13269)

Modifies ratelimit filter to be able to use information
from the route's filter metadata as one of its actions

Signed-off-by: András Czigány <andras.czigany@strivacity.com>

Mirrored from https://github.com/envoyproxy/envoy @ 06813b2c42721489470ec94b2bc75a9771d6e403
pull/622/head
data-plane-api(Azure Pipelines) 4 years ago
parent 6ff7ba7b46
commit 92c3e6e0a8
  1. 48
      envoy/config/route/v3/route_components.proto
  2. 50
      envoy/config/route/v4alpha/route_components.proto

@ -1510,7 +1510,7 @@ message VirtualCluster {
message RateLimit { message RateLimit {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit"; option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit";
// [#next-free-field: 8] // [#next-free-field: 9]
message Action { message Action {
option (udpa.annotations.versioning).previous_message_type = option (udpa.annotations.versioning).previous_message_type =
"envoy.api.v2.route.RateLimit.Action"; "envoy.api.v2.route.RateLimit.Action";
@ -1627,11 +1627,15 @@ message RateLimit {
repeated HeaderMatcher headers = 3 [(validate.rules).repeated = {min_items: 1}]; repeated HeaderMatcher headers = 3 [(validate.rules).repeated = {min_items: 1}];
} }
// The following descriptor entry is appended when the dynamic metadata contains a key value: // The following descriptor entry is appended when the
// :ref:`dynamic metadata <well_known_dynamic_metadata>` contains a key value:
// //
// .. code-block:: cpp // .. code-block:: cpp
// //
// ("<descriptor_key>", "<value_queried_from_metadata>") // ("<descriptor_key>", "<value_queried_from_dynamic_metadata>")
//
// .. attention::
// This action has been deprecated in favor of the :ref:`metadata <envoy_api_msg_config.route.v3.RateLimit.Action.MetaData>` action
message DynamicMetaData { message DynamicMetaData {
// The key to use in the descriptor entry. // The key to use in the descriptor entry.
string descriptor_key = 1 [(validate.rules).string = {min_len: 1}]; string descriptor_key = 1 [(validate.rules).string = {min_len: 1}];
@ -1645,6 +1649,35 @@ message RateLimit {
string default_value = 3; string default_value = 3;
} }
// The following descriptor entry is appended when the metadata contains a key value:
//
// .. code-block:: cpp
//
// ("<descriptor_key>", "<value_queried_from_metadata>")
message MetaData {
enum Source {
// Query :ref:`dynamic metadata <well_known_dynamic_metadata>`
DYNAMIC = 0;
// Query :ref:`route entry metadata <envoy_api_field_config.route.v3.Route.metadata>`
ROUTE_ENTRY = 1;
}
// The key to use in the descriptor entry.
string descriptor_key = 1 [(validate.rules).string = {min_len: 1}];
// Metadata struct that defines the key and path to retrieve the string value. A match will
// only happen if the value in the metadata is of type string.
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
// An optional value to use if *metadata_key* is empty. If not set and
// no value is present under the metadata_key then no descriptor is generated.
string default_value = 3;
// Source of metadata
Source source = 4 [(validate.rules).enum = {defined_only: true}];
}
oneof action_specifier { oneof action_specifier {
option (validate.required) = true; option (validate.required) = true;
@ -1667,7 +1700,14 @@ message RateLimit {
HeaderValueMatch header_value_match = 6; HeaderValueMatch header_value_match = 6;
// Rate limit on dynamic metadata. // Rate limit on dynamic metadata.
DynamicMetaData dynamic_metadata = 7; //
// .. attention::
// This field has been deprecated in favor of the :ref:`metadata <envoy_api_field_config.route.v3.RateLimit.Action.metadata>` field
DynamicMetaData dynamic_metadata = 7
[deprecated = true, (envoy.annotations.disallowed_by_default) = true];
// Rate limit on metadata.
MetaData metadata = 8;
} }
} }

@ -1459,7 +1459,7 @@ message VirtualCluster {
message RateLimit { message RateLimit {
option (udpa.annotations.versioning).previous_message_type = "envoy.config.route.v3.RateLimit"; option (udpa.annotations.versioning).previous_message_type = "envoy.config.route.v3.RateLimit";
// [#next-free-field: 8] // [#next-free-field: 9]
message Action { message Action {
option (udpa.annotations.versioning).previous_message_type = option (udpa.annotations.versioning).previous_message_type =
"envoy.config.route.v3.RateLimit.Action"; "envoy.config.route.v3.RateLimit.Action";
@ -1576,11 +1576,15 @@ message RateLimit {
repeated HeaderMatcher headers = 3 [(validate.rules).repeated = {min_items: 1}]; repeated HeaderMatcher headers = 3 [(validate.rules).repeated = {min_items: 1}];
} }
// The following descriptor entry is appended when the dynamic metadata contains a key value: // The following descriptor entry is appended when the
// :ref:`dynamic metadata <well_known_dynamic_metadata>` contains a key value:
// //
// .. code-block:: cpp // .. code-block:: cpp
// //
// ("<descriptor_key>", "<value_queried_from_metadata>") // ("<descriptor_key>", "<value_queried_from_dynamic_metadata>")
//
// .. attention::
// This action has been deprecated in favor of the :ref:`metadata <envoy_api_msg_config.route.v4alpha.RateLimit.Action.MetaData>` action
message DynamicMetaData { message DynamicMetaData {
option (udpa.annotations.versioning).previous_message_type = option (udpa.annotations.versioning).previous_message_type =
"envoy.config.route.v3.RateLimit.Action.DynamicMetaData"; "envoy.config.route.v3.RateLimit.Action.DynamicMetaData";
@ -1597,6 +1601,42 @@ message RateLimit {
string default_value = 3; string default_value = 3;
} }
// The following descriptor entry is appended when the metadata contains a key value:
//
// .. code-block:: cpp
//
// ("<descriptor_key>", "<value_queried_from_metadata>")
message MetaData {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.route.v3.RateLimit.Action.MetaData";
enum Source {
// Query :ref:`dynamic metadata <well_known_dynamic_metadata>`
DYNAMIC = 0;
// Query :ref:`route entry metadata <envoy_api_field_config.route.v4alpha.Route.metadata>`
ROUTE_ENTRY = 1;
}
// The key to use in the descriptor entry.
string descriptor_key = 1 [(validate.rules).string = {min_len: 1}];
// Metadata struct that defines the key and path to retrieve the string value. A match will
// only happen if the value in the metadata is of type string.
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
// An optional value to use if *metadata_key* is empty. If not set and
// no value is present under the metadata_key then no descriptor is generated.
string default_value = 3;
// Source of metadata
Source source = 4 [(validate.rules).enum = {defined_only: true}];
}
reserved 7;
reserved "dynamic_metadata";
oneof action_specifier { oneof action_specifier {
option (validate.required) = true; option (validate.required) = true;
@ -1618,8 +1658,8 @@ message RateLimit {
// Rate limit on the existence of request headers. // Rate limit on the existence of request headers.
HeaderValueMatch header_value_match = 6; HeaderValueMatch header_value_match = 6;
// Rate limit on dynamic metadata. // Rate limit on metadata.
DynamicMetaData dynamic_metadata = 7; MetaData metadata = 8;
} }
} }

Loading…
Cancel
Save