diff --git a/BUILD b/BUILD index f7c75a2d..6b8fc64e 100644 --- a/BUILD +++ b/BUILD @@ -239,6 +239,7 @@ proto_library( "//envoy/extensions/internal_redirect/previous_routes/v3:pkg", "//envoy/extensions/internal_redirect/safe_cross_scheme/v3:pkg", "//envoy/extensions/network/socket_interface/v3:pkg", + "//envoy/extensions/rate_limit_descriptors/expr/v3:pkg", "//envoy/extensions/retry/host/omit_host_metadata/v3:pkg", "//envoy/extensions/retry/priority/previous_priorities/v3:pkg", "//envoy/extensions/stat_sinks/wasm/v3:pkg", diff --git a/envoy/config/route/v3/route_components.proto b/envoy/config/route/v3/route_components.proto index 2d85fd0d..53b351b8 100644 --- a/envoy/config/route/v3/route_components.proto +++ b/envoy/config/route/v3/route_components.proto @@ -1544,7 +1544,7 @@ message VirtualCluster { message RateLimit { option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit"; - // [#next-free-field: 9] + // [#next-free-field: 10] message Action { option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit.Action"; @@ -1742,6 +1742,9 @@ message RateLimit { // Rate limit on metadata. MetaData metadata = 8; + + // Rate limit descriptor extension. See the rate limit descriptor extensions documentation. + core.v3.TypedExtensionConfig extension = 9; } } diff --git a/envoy/config/route/v4alpha/route_components.proto b/envoy/config/route/v4alpha/route_components.proto index 166b1967..57728259 100644 --- a/envoy/config/route/v4alpha/route_components.proto +++ b/envoy/config/route/v4alpha/route_components.proto @@ -1493,7 +1493,7 @@ message VirtualCluster { message RateLimit { option (udpa.annotations.versioning).previous_message_type = "envoy.config.route.v3.RateLimit"; - // [#next-free-field: 9] + // [#next-free-field: 10] message Action { option (udpa.annotations.versioning).previous_message_type = "envoy.config.route.v3.RateLimit.Action"; @@ -1694,6 +1694,9 @@ message RateLimit { // Rate limit on metadata. MetaData metadata = 8; + + // Rate limit descriptor extension. See the rate limit descriptor extensions documentation. + core.v4alpha.TypedExtensionConfig extension = 9; } } diff --git a/envoy/extensions/rate_limit_descriptors/expr/v3/BUILD b/envoy/extensions/rate_limit_descriptors/expr/v3/BUILD new file mode 100644 index 00000000..facd82ce --- /dev/null +++ b/envoy/extensions/rate_limit_descriptors/expr/v3/BUILD @@ -0,0 +1,12 @@ +# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. + +load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") + +licenses(["notice"]) # Apache 2 + +api_proto_package( + deps = [ + "@com_github_cncf_udpa//udpa/annotations:pkg", + "@com_google_googleapis//google/api/expr/v1alpha1:syntax_proto", + ], +) diff --git a/envoy/extensions/rate_limit_descriptors/expr/v3/expr.proto b/envoy/extensions/rate_limit_descriptors/expr/v3/expr.proto new file mode 100644 index 00000000..76d3505c --- /dev/null +++ b/envoy/extensions/rate_limit_descriptors/expr/v3/expr.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; + +package envoy.extensions.rate_limit_descriptors.expr.v3; + +import "google/api/expr/v1alpha1/syntax.proto"; + +import "udpa/annotations/status.proto"; +import "validate/validate.proto"; + +option java_package = "io.envoyproxy.envoy.extensions.rate_limit_descriptors.expr.v3"; +option java_outer_classname = "ExprProto"; +option java_multiple_files = true; +option (udpa.annotations.file_status).package_version_status = ACTIVE; + +// [#protodoc-title: Rate limit descriptor expression] +// [#extension: envoy.rate_limit_descriptors.expr] + +// The following descriptor entry is appended with a value computed +// from a symbolic Common Expression Language expression. +// See :ref:`attributes ` for the set of +// available attributes. +// +// .. code-block:: cpp +// +// ("", "") +message Descriptor { + // The key to use in the descriptor entry. + string descriptor_key = 1 [(validate.rules).string = {min_len: 1}]; + + // If set to true, Envoy skips the descriptor if the expression evaluates to an error. + // By default, the rate limit is not applied when an expression produces an error. + bool skip_if_error = 2; + + oneof expr_specifier { + // Expression in a text form, e.g. "connection.requested_server_name". + string text = 3 [(validate.rules).string = {min_len: 1}]; + + // Parsed expression in AST form. + google.api.expr.v1alpha1.Expr parsed = 4; + } +} diff --git a/versioning/BUILD b/versioning/BUILD index 41addf76..6f676272 100644 --- a/versioning/BUILD +++ b/versioning/BUILD @@ -122,6 +122,7 @@ proto_library( "//envoy/extensions/internal_redirect/previous_routes/v3:pkg", "//envoy/extensions/internal_redirect/safe_cross_scheme/v3:pkg", "//envoy/extensions/network/socket_interface/v3:pkg", + "//envoy/extensions/rate_limit_descriptors/expr/v3:pkg", "//envoy/extensions/retry/host/omit_host_metadata/v3:pkg", "//envoy/extensions/retry/priority/previous_priorities/v3:pkg", "//envoy/extensions/stat_sinks/wasm/v3:pkg",