88 lines
3.2 KiB
YAML
88 lines
3.2 KiB
YAML
# This example shows how to use Istio local rate limiting with descriptors to limit by path.
|
|
# This uses the base book-info demo and adds rate limiting by path, specifically rate limiting the product page
|
|
# to 10 requests per minute, and the overall fdqn will be able to accept 100 requests per minute.
|
|
apiVersion: networking.istio.io/v1alpha3
|
|
kind: EnvoyFilter
|
|
metadata:
|
|
name: filter-local-ratelimit-svc
|
|
namespace: istio-system
|
|
spec:
|
|
workloadSelector:
|
|
labels:
|
|
app: productpage
|
|
configPatches:
|
|
- applyTo: HTTP_FILTER
|
|
match:
|
|
context: SIDECAR_INBOUND
|
|
listener:
|
|
filterChain:
|
|
filter:
|
|
name: "envoy.filters.network.http_connection_manager"
|
|
patch:
|
|
operation: INSERT_BEFORE
|
|
value:
|
|
name: envoy.filters.http.local_ratelimit
|
|
typed_config:
|
|
"@type": type.googleapis.com/udpa.type.v1.TypedStruct
|
|
type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
|
|
value:
|
|
stat_prefix: http_local_rate_limiter
|
|
- applyTo: HTTP_ROUTE
|
|
match:
|
|
context: SIDECAR_INBOUND
|
|
routeConfiguration:
|
|
vhost:
|
|
name: "inbound|http|8000"
|
|
route:
|
|
action: ANY
|
|
patch:
|
|
operation: MERGE
|
|
value:
|
|
route:
|
|
rate_limits:
|
|
- actions:
|
|
- remote_address: {}
|
|
- actions:
|
|
- header_value_match:
|
|
descriptor_value: "productpage"
|
|
expect_match: true
|
|
headers:
|
|
- name: :path
|
|
string_match:
|
|
prefix: /productpage
|
|
ignore_case: true
|
|
|
|
typed_per_filter_config:
|
|
envoy.filters.http.local_ratelimit:
|
|
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
|
|
stat_prefix: test_enabled
|
|
token_bucket:
|
|
max_tokens: 100
|
|
tokens_per_fill: 100
|
|
fill_interval: 60s
|
|
enable_x_ratelimit_headers: DRAFT_VERSION_03 # This adds the ability to see headers for how many tokens are left in the bucket, how often the bucket refills, and what is the token bucket max.
|
|
filter_enabled:
|
|
runtime_key: test_enabled
|
|
default_value:
|
|
numerator: 100
|
|
denominator: HUNDRED
|
|
filter_enforced:
|
|
runtime_key: test_enabled
|
|
default_value:
|
|
numerator: 100
|
|
denominator: HUNDRED
|
|
response_headers_to_add:
|
|
- append: false
|
|
header:
|
|
key: x-local-rate-limit
|
|
value: "true"
|
|
descriptors:
|
|
- entries:
|
|
- key: header_match
|
|
value: productpage
|
|
token_bucket:
|
|
max_tokens: 10
|
|
tokens_per_fill: 10
|
|
fill_interval: 60s
|
|
|