config: v2 transport API fatal-by-default. (#14223)
This is a followup to #13950 in which the transport API is also fatal-by-default. Risk level: High (this will break anyone who is still using v2 and has not enabled CLI or runtime override) Testing: Various tests updated as described above. New unit test added for bootstrap to server_test and to ads_integration_test for dynamic rejection behavior. api_version_integration_test continues to provide the definitive cross-version transport API integration test. Release Notes: Same as #13950. Signed-off-by: Harvey Tuch <htuch@google.com> Mirrored from https://github.com/envoyproxy/envoy @ 9093131e2a01d368566741943e112fa629c96725pull/623/head
parent
d6828354ba
commit
5ae6eda3ee
15 changed files with 435 additions and 11 deletions
@ -0,0 +1,13 @@ |
||||
# 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 = [ |
||||
"//envoy/config/core/v4alpha:pkg", |
||||
"//envoy/config/ratelimit/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,34 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.config.ratelimit.v4alpha; |
||||
|
||||
import "envoy/config/core/v4alpha/config_source.proto"; |
||||
import "envoy/config/core/v4alpha/grpc_service.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.config.ratelimit.v4alpha"; |
||||
option java_outer_classname = "RlsProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: Rate limit service] |
||||
|
||||
// Rate limit :ref:`configuration overview <config_rate_limit_service>`. |
||||
message RateLimitServiceConfig { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.config.ratelimit.v3.RateLimitServiceConfig"; |
||||
|
||||
reserved 1, 3; |
||||
|
||||
// Specifies the gRPC service that hosts the rate limit service. The client |
||||
// will connect to this cluster when it needs to make rate limit service |
||||
// requests. |
||||
core.v4alpha.GrpcService grpc_service = 2 [(validate.rules).message = {required: true}]; |
||||
|
||||
// API version for rate limit transport protocol. This describes the rate limit gRPC endpoint and |
||||
// version of messages used on the wire. |
||||
core.v4alpha.ApiVersion transport_api_version = 4 [(validate.rules).enum = {defined_only: true}]; |
||||
} |
@ -0,0 +1,13 @@ |
||||
# 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 = [ |
||||
"//envoy/config/core/v4alpha:pkg", |
||||
"//envoy/extensions/access_loggers/grpc/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,89 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.access_loggers.grpc.v4alpha; |
||||
|
||||
import "envoy/config/core/v4alpha/config_source.proto"; |
||||
import "envoy/config/core/v4alpha/grpc_service.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
import "google/protobuf/wrappers.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.access_loggers.grpc.v4alpha"; |
||||
option java_outer_classname = "AlsProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: gRPC Access Log Service (ALS)] |
||||
|
||||
// Configuration for the built-in *envoy.access_loggers.http_grpc* |
||||
// :ref:`AccessLog <envoy_api_msg_config.accesslog.v4alpha.AccessLog>`. This configuration will |
||||
// populate :ref:`StreamAccessLogsMessage.http_logs |
||||
// <envoy_api_field_service.accesslog.v4alpha.StreamAccessLogsMessage.http_logs>`. |
||||
// [#extension: envoy.access_loggers.http_grpc] |
||||
message HttpGrpcAccessLogConfig { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.access_loggers.grpc.v3.HttpGrpcAccessLogConfig"; |
||||
|
||||
CommonGrpcAccessLogConfig common_config = 1 [(validate.rules).message = {required: true}]; |
||||
|
||||
// Additional request headers to log in :ref:`HTTPRequestProperties.request_headers |
||||
// <envoy_api_field_data.accesslog.v3.HTTPRequestProperties.request_headers>`. |
||||
repeated string additional_request_headers_to_log = 2; |
||||
|
||||
// Additional response headers to log in :ref:`HTTPResponseProperties.response_headers |
||||
// <envoy_api_field_data.accesslog.v3.HTTPResponseProperties.response_headers>`. |
||||
repeated string additional_response_headers_to_log = 3; |
||||
|
||||
// Additional response trailers to log in :ref:`HTTPResponseProperties.response_trailers |
||||
// <envoy_api_field_data.accesslog.v3.HTTPResponseProperties.response_trailers>`. |
||||
repeated string additional_response_trailers_to_log = 4; |
||||
} |
||||
|
||||
// Configuration for the built-in *envoy.access_loggers.tcp_grpc* type. This configuration will |
||||
// populate *StreamAccessLogsMessage.tcp_logs*. |
||||
// [#extension: envoy.access_loggers.tcp_grpc] |
||||
message TcpGrpcAccessLogConfig { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.access_loggers.grpc.v3.TcpGrpcAccessLogConfig"; |
||||
|
||||
CommonGrpcAccessLogConfig common_config = 1 [(validate.rules).message = {required: true}]; |
||||
} |
||||
|
||||
// Common configuration for gRPC access logs. |
||||
// [#next-free-field: 7] |
||||
message CommonGrpcAccessLogConfig { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.access_loggers.grpc.v3.CommonGrpcAccessLogConfig"; |
||||
|
||||
// The friendly name of the access log to be returned in :ref:`StreamAccessLogsMessage.Identifier |
||||
// <envoy_api_msg_service.accesslog.v4alpha.StreamAccessLogsMessage.Identifier>`. This allows the |
||||
// access log server to differentiate between different access logs coming from the same Envoy. |
||||
string log_name = 1 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// The gRPC service for the access log service. |
||||
config.core.v4alpha.GrpcService grpc_service = 2 [(validate.rules).message = {required: true}]; |
||||
|
||||
// API version for access logs service transport protocol. This describes the access logs service |
||||
// gRPC endpoint and version of messages used on the wire. |
||||
config.core.v4alpha.ApiVersion transport_api_version = 6 |
||||
[(validate.rules).enum = {defined_only: true}]; |
||||
|
||||
// Interval for flushing access logs to the gRPC stream. Logger will flush requests every time |
||||
// this interval is elapsed, or when batch size limit is hit, whichever comes first. Defaults to |
||||
// 1 second. |
||||
google.protobuf.Duration buffer_flush_interval = 3 [(validate.rules).duration = {gt {}}]; |
||||
|
||||
// Soft size limit in bytes for access log entries buffer. Logger will buffer requests until |
||||
// this limit it hit, or every time flush interval is elapsed, whichever comes first. Setting it |
||||
// to zero effectively disables the batching. Defaults to 16384. |
||||
google.protobuf.UInt32Value buffer_size_bytes = 4; |
||||
|
||||
// Additional filter state objects to log in :ref:`filter_state_objects |
||||
// <envoy_api_field_data.accesslog.v3.AccessLogCommon.filter_state_objects>`. |
||||
// Logger will call `FilterState::Object::serializeAsProto` to serialize the filter state object. |
||||
repeated string filter_state_objects_to_log = 5; |
||||
} |
@ -0,0 +1,13 @@ |
||||
# 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 = [ |
||||
"//envoy/config/ratelimit/v4alpha:pkg", |
||||
"//envoy/extensions/filters/http/ratelimit/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,125 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.http.ratelimit.v4alpha; |
||||
|
||||
import "envoy/config/ratelimit/v4alpha/rls.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.http.ratelimit.v4alpha"; |
||||
option java_outer_classname = "RateLimitProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: Rate limit] |
||||
// Rate limit :ref:`configuration overview <config_http_filters_rate_limit>`. |
||||
// [#extension: envoy.filters.http.ratelimit] |
||||
|
||||
// [#next-free-field: 10] |
||||
message RateLimit { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.http.ratelimit.v3.RateLimit"; |
||||
|
||||
// Defines the version of the standard to use for X-RateLimit headers. |
||||
enum XRateLimitHeadersRFCVersion { |
||||
// X-RateLimit headers disabled. |
||||
OFF = 0; |
||||
|
||||
// Use `draft RFC Version 03 <https://tools.ietf.org/id/draft-polli-ratelimit-headers-03.html>`_. |
||||
DRAFT_VERSION_03 = 1; |
||||
} |
||||
|
||||
// The rate limit domain to use when calling the rate limit service. |
||||
string domain = 1 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// Specifies the rate limit configurations to be applied with the same |
||||
// stage number. If not set, the default stage number is 0. |
||||
// |
||||
// .. note:: |
||||
// |
||||
// The filter supports a range of 0 - 10 inclusively for stage numbers. |
||||
uint32 stage = 2 [(validate.rules).uint32 = {lte: 10}]; |
||||
|
||||
// The type of requests the filter should apply to. The supported |
||||
// types are *internal*, *external* or *both*. A request is considered internal if |
||||
// :ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>` is set to true. If |
||||
// :ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>` is not set or false, a |
||||
// request is considered external. The filter defaults to *both*, and it will apply to all request |
||||
// types. |
||||
string request_type = 3 |
||||
[(validate.rules).string = {in: "internal" in: "external" in: "both" in: ""}]; |
||||
|
||||
// The timeout in milliseconds for the rate limit service RPC. If not |
||||
// set, this defaults to 20ms. |
||||
google.protobuf.Duration timeout = 4; |
||||
|
||||
// The filter's behaviour in case the rate limiting service does |
||||
// not respond back. When it is set to true, Envoy will not allow traffic in case of |
||||
// communication failure between rate limiting service and the proxy. |
||||
bool failure_mode_deny = 5; |
||||
|
||||
// Specifies whether a `RESOURCE_EXHAUSTED` gRPC code must be returned instead |
||||
// of the default `UNAVAILABLE` gRPC code for a rate limited gRPC call. The |
||||
// HTTP code will be 200 for a gRPC response. |
||||
bool rate_limited_as_resource_exhausted = 6; |
||||
|
||||
// Configuration for an external rate limit service provider. If not |
||||
// specified, any calls to the rate limit service will immediately return |
||||
// success. |
||||
config.ratelimit.v4alpha.RateLimitServiceConfig rate_limit_service = 7 |
||||
[(validate.rules).message = {required: true}]; |
||||
|
||||
// Defines the standard version to use for X-RateLimit headers emitted by the filter: |
||||
// |
||||
// * ``X-RateLimit-Limit`` - indicates the request-quota associated to the |
||||
// client in the current time-window followed by the description of the |
||||
// quota policy. The values are returned by the rate limiting service in |
||||
// :ref:`current_limit<envoy_v3_api_field_service.ratelimit.v3.RateLimitResponse.DescriptorStatus.current_limit>` |
||||
// field. Example: `10, 10;w=1;name="per-ip", 1000;w=3600`. |
||||
// * ``X-RateLimit-Remaining`` - indicates the remaining requests in the |
||||
// current time-window. The values are returned by the rate limiting service |
||||
// in :ref:`limit_remaining<envoy_v3_api_field_service.ratelimit.v3.RateLimitResponse.DescriptorStatus.limit_remaining>` |
||||
// field. |
||||
// * ``X-RateLimit-Reset`` - indicates the number of seconds until reset of |
||||
// the current time-window. The values are returned by the rate limiting service |
||||
// in :ref:`duration_until_reset<envoy_v3_api_field_service.ratelimit.v3.RateLimitResponse.DescriptorStatus.duration_until_reset>` |
||||
// field. |
||||
// |
||||
// In case rate limiting policy specifies more then one time window, the values |
||||
// above represent the window that is closest to reaching its limit. |
||||
// |
||||
// For more information about the headers specification see selected version of |
||||
// the `draft RFC <https://tools.ietf.org/id/draft-polli-ratelimit-headers-03.html>`_. |
||||
// |
||||
// Disabled by default. |
||||
XRateLimitHeadersRFCVersion enable_x_ratelimit_headers = 8 |
||||
[(validate.rules).enum = {defined_only: true}]; |
||||
|
||||
// Disables emitting the :ref:`x-envoy-ratelimited<config_http_filters_router_x-envoy-ratelimited>` header |
||||
// in case of rate limiting (i.e. 429 responses). |
||||
// Having this header not present potentially makes the request retriable. |
||||
bool disable_x_envoy_ratelimited_header = 9; |
||||
} |
||||
|
||||
message RateLimitPerRoute { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.http.ratelimit.v3.RateLimitPerRoute"; |
||||
|
||||
enum VhRateLimitsOptions { |
||||
// Use the virtual host rate limits unless the route has a rate limit policy. |
||||
OVERRIDE = 0; |
||||
|
||||
// Use the virtual host rate limits even if the route has a rate limit policy. |
||||
INCLUDE = 1; |
||||
|
||||
// Ignore the virtual host rate limits even if the route does not have a rate limit policy. |
||||
IGNORE = 2; |
||||
} |
||||
|
||||
// Specifies if the rate limit filter should include the virtual host rate limits. |
||||
VhRateLimitsOptions vh_rate_limits = 1 [(validate.rules).enum = {defined_only: true}]; |
||||
} |
@ -0,0 +1,14 @@ |
||||
# 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 = [ |
||||
"//envoy/config/ratelimit/v4alpha:pkg", |
||||
"//envoy/extensions/common/ratelimit/v3:pkg", |
||||
"//envoy/extensions/filters/network/ratelimit/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,53 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.network.ratelimit.v4alpha; |
||||
|
||||
import "envoy/config/ratelimit/v4alpha/rls.proto"; |
||||
import "envoy/extensions/common/ratelimit/v3/ratelimit.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.network.ratelimit.v4alpha"; |
||||
option java_outer_classname = "RateLimitProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: Rate limit] |
||||
// Rate limit :ref:`configuration overview <config_network_filters_rate_limit>`. |
||||
// [#extension: envoy.filters.network.ratelimit] |
||||
|
||||
// [#next-free-field: 7] |
||||
message RateLimit { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.network.ratelimit.v3.RateLimit"; |
||||
|
||||
// The prefix to use when emitting :ref:`statistics <config_network_filters_rate_limit_stats>`. |
||||
string stat_prefix = 1 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// The rate limit domain to use in the rate limit service request. |
||||
string domain = 2 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// The rate limit descriptor list to use in the rate limit service request. |
||||
repeated common.ratelimit.v3.RateLimitDescriptor descriptors = 3 |
||||
[(validate.rules).repeated = {min_items: 1}]; |
||||
|
||||
// The timeout in milliseconds for the rate limit service RPC. If not |
||||
// set, this defaults to 20ms. |
||||
google.protobuf.Duration timeout = 4; |
||||
|
||||
// The filter's behaviour in case the rate limiting service does |
||||
// not respond back. When it is set to true, Envoy will not allow traffic in case of |
||||
// communication failure between rate limiting service and the proxy. |
||||
// Defaults to false. |
||||
bool failure_mode_deny = 5; |
||||
|
||||
// Configuration for an external rate limit service provider. If not |
||||
// specified, any calls to the rate limit service will immediately return |
||||
// success. |
||||
config.ratelimit.v4alpha.RateLimitServiceConfig rate_limit_service = 6 |
||||
[(validate.rules).message = {required: true}]; |
||||
} |
@ -0,0 +1,13 @@ |
||||
# 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 = [ |
||||
"//envoy/config/ratelimit/v4alpha:pkg", |
||||
"//envoy/extensions/filters/network/thrift_proxy/filters/ratelimit/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,56 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.network.thrift_proxy.filters.ratelimit.v4alpha; |
||||
|
||||
import "envoy/config/ratelimit/v4alpha/rls.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.network.thrift_proxy.filters.ratelimit.v4alpha"; |
||||
option java_outer_classname = "RateLimitProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: Rate limit] |
||||
// Rate limit :ref:`configuration overview <config_thrift_filters_rate_limit>`. |
||||
// [#extension: envoy.filters.thrift.ratelimit] |
||||
|
||||
// [#next-free-field: 6] |
||||
message RateLimit { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.network.thrift_proxy.filters.ratelimit.v3.RateLimit"; |
||||
|
||||
// The rate limit domain to use in the rate limit service request. |
||||
string domain = 1 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// Specifies the rate limit configuration stage. Each configured rate limit filter performs a |
||||
// rate limit check using descriptors configured in the |
||||
// :ref:`envoy_api_msg_extensions.filters.network.thrift_proxy.v4alpha.RouteAction` for the request. |
||||
// Only those entries with a matching stage number are used for a given filter. If not set, the |
||||
// default stage number is 0. |
||||
// |
||||
// .. note:: |
||||
// |
||||
// The filter supports a range of 0 - 10 inclusively for stage numbers. |
||||
uint32 stage = 2 [(validate.rules).uint32 = {lte: 10}]; |
||||
|
||||
// The timeout in milliseconds for the rate limit service RPC. If not |
||||
// set, this defaults to 20ms. |
||||
google.protobuf.Duration timeout = 3; |
||||
|
||||
// The filter's behaviour in case the rate limiting service does |
||||
// not respond back. When it is set to true, Envoy will not allow traffic in case of |
||||
// communication failure between rate limiting service and the proxy. |
||||
// Defaults to false. |
||||
bool failure_mode_deny = 4; |
||||
|
||||
// Configuration for an external rate limit service provider. If not |
||||
// specified, any calls to the rate limit service will immediately return |
||||
// success. |
||||
config.ratelimit.v4alpha.RateLimitServiceConfig rate_limit_service = 5 |
||||
[(validate.rules).message = {required: true}]; |
||||
} |
Loading…
Reference in new issue