Adding missing filters (http fault, redis, mongo, tcp, rate limits, etc..) (#192)
Signed-off-by: Shriram Rajagopalan <shriram@us.ibm.com>pull/207/head
parent
0d30f54a20
commit
f2c1dc99df
24 changed files with 503 additions and 59 deletions
@ -0,0 +1,25 @@ |
|||||||
|
version: 2 |
||||||
|
jobs: |
||||||
|
test: |
||||||
|
docker: |
||||||
|
- image: lyft/envoy-build:114e24c6fd05fc026492e9d2ca5608694e5ea59d |
||||||
|
resource_class: xlarge |
||||||
|
working_directory: /source |
||||||
|
steps: |
||||||
|
- checkout |
||||||
|
- run: ci/do_ci.sh bazel.test |
||||||
|
docs: |
||||||
|
docker: |
||||||
|
- image: lyft/envoy-build:114e24c6fd05fc026492e9d2ca5608694e5ea59d |
||||||
|
resource_class: xlarge |
||||||
|
working_directory: /source |
||||||
|
steps: |
||||||
|
- checkout |
||||||
|
- run: ci/do_ci.sh bazel.docs |
||||||
|
|
||||||
|
workflows: |
||||||
|
version: 2 |
||||||
|
all: |
||||||
|
jobs: |
||||||
|
- test |
||||||
|
- docs |
@ -0,0 +1,31 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
// Delay specification is used to inject latency into the |
||||||
|
// HTTP/gRPC/Mongo/Redis operation or delay proxying of TCP connections. |
||||||
|
message FaultDelay { |
||||||
|
enum FaultDelayType { |
||||||
|
// Fixed delay (step function). |
||||||
|
FIXED = 0; |
||||||
|
} |
||||||
|
|
||||||
|
// Delay type to use (fixed|exponential|..). Currently, only fixed delay (step function) is supported. |
||||||
|
FaultDelayType type = 1; |
||||||
|
|
||||||
|
// An integer between 0-100 indicating the percentage of operations/connection requests |
||||||
|
// on which the delay will be injected. |
||||||
|
uint32 percent = 2; |
||||||
|
|
||||||
|
oneof fault_delay_type { |
||||||
|
// Add a fixed delay before forwarding the operation upstream. See |
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto3#json for |
||||||
|
// the JSON/YAML Duration mapping. For HTTP/Mongo/Redis, the specified |
||||||
|
// delay will be injected before a new request/operation. For TCP |
||||||
|
// connections, the proxying of the connection upstream will be delayed |
||||||
|
// for the specified period. REQUIRED. |
||||||
|
google.protobuf.Duration fixed_delay = 3; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "http_connection_manager", |
||||||
|
srcs = ["http_connection_manager.proto"], |
||||||
|
deps = [ |
||||||
|
"//api:base", |
||||||
|
"//api:protocol", |
||||||
|
"//api:rds", |
||||||
|
], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "router", |
||||||
|
srcs = ["router.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "buffer", |
||||||
|
srcs = ["buffer.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "transcoder", |
||||||
|
srcs = ["transcoder.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "rate_limit", |
||||||
|
srcs = ["rate_limit.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "ip_tagging", |
||||||
|
srcs = ["ip_tagging.proto"], |
||||||
|
deps = ["//api:address"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "health_check", |
||||||
|
srcs = ["health_check.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "fault", |
||||||
|
srcs = ["fault.proto"], |
||||||
|
deps = [ |
||||||
|
"//api:rds", |
||||||
|
"//api/filter:fault", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,19 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
import "google/protobuf/wrappers.proto"; |
||||||
|
|
||||||
|
// The buffer filter is used to stop filter iteration and wait for a fully |
||||||
|
// buffered complete request. This is useful in different situations |
||||||
|
// including protecting some applications from having to deal with partial |
||||||
|
// requests and high network latency. |
||||||
|
message Buffer { |
||||||
|
// The maximum request size that the filter will before the connection |
||||||
|
// manager will stop buffering and return a 413 response. REQUIRED. |
||||||
|
google.protobuf.UInt32Value max_request_bytes = 1; |
||||||
|
// The maximum amount of time that the filter will wait for a complete |
||||||
|
// request before returning a 408 response. REQUIRED. |
||||||
|
google.protobuf.Duration max_request_time = 2; |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "api/rds.proto"; |
||||||
|
import "api/filter/fault.proto"; |
||||||
|
|
||||||
|
// Abort specification is used to prematurely abort a HTTP/gRPC/Mongo/Redis |
||||||
|
// operation/TCP connection with a pre-specified error code. |
||||||
|
message FaultAbort { |
||||||
|
// An integer between 0-100 indicating the percentage of requests/operations/connections |
||||||
|
// that will be aborted with the error code provided. |
||||||
|
uint32 percent = 1; |
||||||
|
|
||||||
|
// Applicable only for HTTP connections. |
||||||
|
oneof error_type { |
||||||
|
// HTTP status code to use to abort the HTTP request. |
||||||
|
uint32 http_status = 2; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// The fault injection filter can be used to test the resiliency of |
||||||
|
// microservices to different forms of failures. The filter can be used to |
||||||
|
// inject delays and abort requests with user-specified error codes, |
||||||
|
// thereby providing the ability to stage different failure scenarios such |
||||||
|
// as service failures, service overloads, high network latency, network |
||||||
|
// partitions, etc. Faults injection can be limited to a specific set of |
||||||
|
// requests based on the (destination) upstream cluster of a request and/or |
||||||
|
// a set of pre-defined request headers. |
||||||
|
// |
||||||
|
// The scope of failures is restricted to those that are observable by an |
||||||
|
// application communicating over the network. CPU and disk failures on the |
||||||
|
// local host cannot be emulated. |
||||||
|
// |
||||||
|
// Currently, the fault injection filter has the following limitations: |
||||||
|
// |
||||||
|
// * Abort codes are restricted to HTTP status codes only |
||||||
|
// * Delays are restricted to fixed duration. |
||||||
|
// |
||||||
|
// Future versions will include support for restricting faults to specific |
||||||
|
// routes, and delay durations based on distributions. |
||||||
|
// |
||||||
|
// * Note:* The fault injection filter must be inserted before any |
||||||
|
// other filter, including the router filter. |
||||||
|
message HTTPFault { |
||||||
|
// If specified, the filter will inject delays based on the values in the |
||||||
|
// object. At least abort or delay must be specified. |
||||||
|
FaultDelay delay = 1; |
||||||
|
|
||||||
|
// If specified, the filter will abort requests based on the values in |
||||||
|
// the object. At least abort or delay must be specified. |
||||||
|
FaultAbort abort = 2; |
||||||
|
|
||||||
|
// Specifies the name of the (destination) upstream cluster that the |
||||||
|
// filter should match on. Fault injection will be restricted to requests |
||||||
|
// bound to the specific upstream cluster. |
||||||
|
string upstream_cluster = 3; |
||||||
|
|
||||||
|
// Specifies a set of headers that the filter should match on. The fault |
||||||
|
// injection filter can be applied selectively to requests that match a |
||||||
|
// set of headers specified in the fault filter config. The chances of |
||||||
|
// actual fault injection further depend on the values of FaultAbort.percent |
||||||
|
// and FaultDelay.percent parameters. The filter will check the request’s |
||||||
|
// headers against all the specified headers in the filter config. A |
||||||
|
// match will happen if all the headers in the config are present in the |
||||||
|
// request with the same values (or based on presence if the `value` field |
||||||
|
// is not in the config). TODO: allow runtime configuration on per entry |
||||||
|
// basis for headers match. |
||||||
|
repeated HeaderMatcher headers = 4; |
||||||
|
|
||||||
|
// Faults are injected for the specified list of downstream hosts. If |
||||||
|
// this setting is not set, faults are injected for all downstream |
||||||
|
// nodes. Downstream node name is taken from the HTTP |
||||||
|
// x-envoy-downstream-service-node header and compared against |
||||||
|
// downstream_nodes list. |
||||||
|
repeated string downstream_nodes = 5; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
import "google/protobuf/wrappers.proto"; |
||||||
|
|
||||||
|
// Note that the filter will automatically fail health checks and set the |
||||||
|
// x-envoy-immediate-health-check-fail header if the /healthcheck/fail |
||||||
|
// admin endpoint has been called. (The /healthcheck/ok admin endpoint |
||||||
|
// reverses this behavior). |
||||||
|
message HealthCheck { |
||||||
|
// Specifies whether the filter operates in pass through mode or not. REQUIRED. |
||||||
|
google.protobuf.BoolValue pass_through_mode = 1; |
||||||
|
// Specifies the incoming HTTP endpoint that should be considered the |
||||||
|
// health check endpoint. For example /healthcheck. |
||||||
|
string endpoint = 2; |
||||||
|
// If operating in pass through mode, the amount of time in milliseconds |
||||||
|
// that the filter should cache the upstream response. REQUIRED. |
||||||
|
google.protobuf.Duration cache_time = 3; |
||||||
|
} |
@ -1,6 +1,6 @@ |
|||||||
syntax = "proto3"; |
syntax = "proto3"; |
||||||
|
|
||||||
package envoy.api.v2.filter; |
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
import "api/base.proto"; |
import "api/base.proto"; |
||||||
import "api/protocol.proto"; |
import "api/protocol.proto"; |
@ -0,0 +1,34 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "api/address.proto"; |
||||||
|
|
||||||
|
// This is an HTTP filter which enables Envoy to tag requests with extra |
||||||
|
// information such as location, cloud source, and any extra data. This is |
||||||
|
// useful to prevent against DDoS. |
||||||
|
message IPTagging { |
||||||
|
enum RequestType { |
||||||
|
BOTH = 0; |
||||||
|
INTERNAL = 1; |
||||||
|
EXTERNAL = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// The type of requests the filter should apply to. The supported types |
||||||
|
// are internal, external or both. A request is considered internal if |
||||||
|
// x-envoy-internal is set to true. If 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. |
||||||
|
RequestType request_type = 1; |
||||||
|
|
||||||
|
repeated IPTag ip_tags = 2; |
||||||
|
|
||||||
|
message IPTag { |
||||||
|
// Specifies the ip tag name to apply. |
||||||
|
string ip_tag_name = 1; |
||||||
|
|
||||||
|
// A list of IP address and subnet masks that will be tagged with the |
||||||
|
// ip_tag_name. Both IPv4 and IPv6 CIDR addresses are allowed here. |
||||||
|
repeated CidrRange ip_list = 2; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
// HTTP rate limit filter configuration. The HTTP rate limit filter will |
||||||
|
// call the rate limit service when the request’s route or virtual host has |
||||||
|
// one or more rate limit configurations that match the filter stage |
||||||
|
// setting. The route can optionally include the virtual host rate limit |
||||||
|
// configurations. More than one configuration can apply to a request. Each |
||||||
|
// configuration results in a descriptor being sent to the rate limit |
||||||
|
// service. If the rate limit service is called, and the response for any |
||||||
|
// of the descriptors is over limit, a 429 response is returned. |
||||||
|
message RateLimit { |
||||||
|
// The rate limit domain to use when calling the rate limit service. |
||||||
|
string domain = 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; |
||||||
|
// The type of requests the filter should apply to. The supported types |
||||||
|
// are internal, external or both. A request is considered internal if |
||||||
|
// x-envoy-internal is set to true. If 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; |
||||||
|
// The timeout in milliseconds for the rate limit service RPC. If not |
||||||
|
// set, this defaults to 20ms. |
||||||
|
google.protobuf.Duration timeout = 4; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
import "google/protobuf/wrappers.proto"; |
||||||
|
|
||||||
|
// The router filter implements HTTP forwarding. It will be used in almost |
||||||
|
// all HTTP proxy scenarios that Envoy is deployed for. The filter’s main |
||||||
|
// job is to follow the instructions specified in the configured route |
||||||
|
// table. In addition to forwarding and redirection, the filter also handles |
||||||
|
// retry, statistics, etc. |
||||||
|
message Router { |
||||||
|
// Whether the router generates dynamic cluster statistics. Defaults to |
||||||
|
// true. Can be disabled in high performance scenarios. |
||||||
|
google.protobuf.BoolValue dynamic_stats = 1; |
||||||
|
// Whether to start a child span for egress routed calls. This can be |
||||||
|
// useful in scenarios where other filters (auth, ratelimit, etc.) make |
||||||
|
// outbound calls and have child spans rooted at the same ingress |
||||||
|
// parent. Defaults to false. |
||||||
|
bool start_child_span = 2; |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.http; |
||||||
|
|
||||||
|
// This is a filter which allows a RESTful JSON API client to send requests |
||||||
|
// to Envoy over HTTP and get proxied to a gRPC service. The HTTP mapping |
||||||
|
// for the gRPC service has to be defined by custom options, defined in |
||||||
|
// https://cloud.google.com/service-management/reference/rpc/google.api#http |
||||||
|
message GrpcJsonTranscoder { |
||||||
|
// The filter config for the filter requires the descriptor file as well |
||||||
|
// as a list of the gRPC services to be transcoded. |
||||||
|
|
||||||
|
// Supplies the binary protobuf descriptor set for the gRPC services. The |
||||||
|
// descriptor set has to include all of the types that are used in the |
||||||
|
// services. Make sure to use the --include_import option for protoc. |
||||||
|
string proto_descriptor = 1; |
||||||
|
// A list of strings that supplies the service names that the transcoder |
||||||
|
// will translate. If the service name doesn’t exist in proto_descriptor, |
||||||
|
// Envoy will fail at startup. The proto_descriptor may contain more |
||||||
|
// services than the service names specified here, but they won’t be |
||||||
|
// translated. |
||||||
|
repeated string services = 2; |
||||||
|
|
||||||
|
// Control options for response json. These options are passed directly |
||||||
|
// to JsonPrintOptions. |
||||||
|
message PrintOptions { |
||||||
|
// Whether to add spaces, line breaks and indentation to make the JSON |
||||||
|
// output easy to read. Default to false. |
||||||
|
bool add_whitespace = 1; |
||||||
|
|
||||||
|
// Whether to always print primitive fields. By default primitive |
||||||
|
// fields with default values will be omitted in JSON output. For |
||||||
|
// example, an int32 field set to 0 will be omitted. Set this flag to |
||||||
|
// true will override the default behavior and print primitive fields |
||||||
|
// regardless of their values. Default to false. |
||||||
|
bool always_print_primitive_fields = 2; |
||||||
|
|
||||||
|
// Whether to always print enums as ints. By default they are rendered |
||||||
|
// as strings. Default to false. |
||||||
|
bool always_print_enums_as_ints = 3; |
||||||
|
|
||||||
|
// Whether to preserve proto field names. By default protobuf will |
||||||
|
// generate JSON field names use json_name option, or lower camel case, |
||||||
|
// in that order. Set this flag will preserve original field |
||||||
|
// names. Default to false. |
||||||
|
bool preserve_proto_field_names = 4; |
||||||
|
}; |
||||||
|
|
||||||
|
// Control options for response json. These options are passed directly |
||||||
|
// to JsonPrintOptions. |
||||||
|
PrintOptions print_options = 3; |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "mongo_proxy", |
||||||
|
srcs = ["mongo_proxy.proto"], |
||||||
|
deps = ["//api/filter:fault"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "tcp_proxy", |
||||||
|
srcs = ["tcp_proxy.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "redis_proxy", |
||||||
|
srcs = ["redis_proxy.proto"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "client_ssl_auth", |
||||||
|
srcs = ["client_ssl_auth.proto"], |
||||||
|
deps = ["//api:address"], |
||||||
|
) |
||||||
|
|
||||||
|
api_proto_library( |
||||||
|
name = "rate_limit", |
||||||
|
srcs = ["rate_limit.proto"], |
||||||
|
deps = ["//api:rls"], |
||||||
|
) |
@ -0,0 +1,30 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.network; |
||||||
|
|
||||||
|
import "api/address.proto"; |
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
// Envoy provides a network filter that performs TLS client authentication |
||||||
|
// via principals fetched from a REST VPN service. This filter matches the |
||||||
|
// presented client certificate hash against the principal list to |
||||||
|
// determine whether the connection should be allowed or not. Optional IP |
||||||
|
// white listing can also be configured. This functionality can be used to |
||||||
|
// build edge proxy VPN support for web infrastructure. |
||||||
|
message ClientSSLAuth { |
||||||
|
// The cluster manager cluster that runs the authentication service. The |
||||||
|
// filter will connect to the service every 60s to fetch the list of |
||||||
|
// principals. The service must support the expected REST API. |
||||||
|
string auth_api_cluster = 1; |
||||||
|
// The prefix to use when emitting statistics. |
||||||
|
string stat_prefix = 2; |
||||||
|
// Time in milliseconds between principal refreshes from the |
||||||
|
// authentication service. Default is 60000 (60s). The actual fetch time |
||||||
|
// will be this value plus a random jittered value between |
||||||
|
// 0-refresh_delay_ms milliseconds. |
||||||
|
google.protobuf.Duration refresh_delay = 3; |
||||||
|
// An optional list of IP address and subnet masks that should be white |
||||||
|
// listed for access by the filter. If no list is provided, there is no |
||||||
|
// IP white list. |
||||||
|
repeated CidrRange ip_white_list = 4; |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.network; |
||||||
|
|
||||||
|
import "api/rls.proto"; |
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
// TCP rate limit filter configuration |
||||||
|
message RateLimit { |
||||||
|
// The prefix to use when emitting statistics. |
||||||
|
string stat_prefix = 1; |
||||||
|
// The rate limit domain to use in the rate limit service request. |
||||||
|
string domain = 2; |
||||||
|
// The rate limit descriptor list to use in the rate limit service request. |
||||||
|
repeated RateLimitDescriptor descriptors = 3; |
||||||
|
// The timeout in milliseconds for the rate limit service RPC. If not |
||||||
|
// set, this defaults to 20ms. |
||||||
|
google.protobuf.Duration timeout = 4; |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.api.v2.filter.network; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
message RedisProxy { |
||||||
|
// The human readable prefix to use when emitting statistics for the |
||||||
|
// Redis proxy filter. See the statistics documentation for more information. |
||||||
|
string stat_prefix = 1; |
||||||
|
|
||||||
|
// Indicates the upstream cluster to which the operation should be routed to. |
||||||
|
string cluster = 2; |
||||||
|
|
||||||
|
// Redis connection pool settings. |
||||||
|
message ConnPoolSettings { |
||||||
|
// Per-operation timeout. See |
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto3#json for |
||||||
|
// the JSON/YAML Duration mapping. The timer starts when the first |
||||||
|
// command of a pipeline is written to the backend connection. Each |
||||||
|
// response received from Redis resets the timer since it signifies |
||||||
|
// that the next command is being processed by the backend. The only |
||||||
|
// exception to this behavior is when a connection to a backend is not |
||||||
|
// yet established. In that case, the connect timeout on the cluster |
||||||
|
// will govern the timeout until the connection is ready. REQUIRED. |
||||||
|
google.protobuf.Duration op_timeout = 1; |
||||||
|
} |
||||||
|
|
||||||
|
// Network settings for the connection pool to the upstream cluster. |
||||||
|
ConnPoolSettings settings = 3; |
||||||
|
} |
@ -1,6 +1,6 @@ |
|||||||
syntax = "proto3"; |
syntax = "proto3"; |
||||||
|
|
||||||
package envoy.api.v2.filter; |
package envoy.api.v2.filter.network; |
||||||
|
|
||||||
import "google/protobuf/duration.proto"; |
import "google/protobuf/duration.proto"; |
||||||
|
|
@ -1,25 +0,0 @@ |
|||||||
syntax = "proto3"; |
|
||||||
|
|
||||||
package envoy.api.v2.filter; |
|
||||||
|
|
||||||
message RateLimit { |
|
||||||
// The human readable prefix to use when emitting statistics for the |
|
||||||
// rate limit filter. See the statistics documentation for more information. |
|
||||||
string stat_prefix = 1; |
|
||||||
|
|
||||||
// The rate limit domain to use in the rate limit service request. |
|
||||||
string domain = 2; |
|
||||||
|
|
||||||
// The rate limit descriptor list to use in the rate limit service request. |
|
||||||
// TODO(htuch): This should be the shared canonical RateLimitDescriptor when |
|
||||||
// we import the rate limit protos |
|
||||||
// (https://github.com/lyft/envoy-api/issues/26). |
|
||||||
message RateLimitDescriptor { |
|
||||||
message Entry { |
|
||||||
string key = 1; |
|
||||||
string value = 2; |
|
||||||
} |
|
||||||
repeated Entry entries = 1; |
|
||||||
} |
|
||||||
repeated RateLimitDescriptor rate_limit_descriptors = 3; |
|
||||||
} |
|
Loading…
Reference in new issue