istio使用envoyfilter实现接口级别限流
·
envoyfilter
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: rate-limit
namespace: default
spec:
workloadSelector:
labels:
app: demo-app # 替换为你的服务 Pod 的标签(通过 `kubectl get pods -n default --show-labels` 查看)
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
patch:
operation: MERGE
value:
route:
rate_limits:
- actions:
- remote_address: {}
- actions:
- header_value_match:
descriptor_value: route1
headers:
- name: :path
string_match:
prefix: /hello
- actions:
- remote_address: {}
- actions:
- header_value_match:
descriptor_value: route2
headers:
- name: :path
string_match:
prefix: /welcome
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
'@type': type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
always_consume_default_token_bucket: false
descriptors:
- entries:
- key: header_match
value: route1
token_bucket:
fill_interval: 60s
max_tokens: 5000
tokens_per_fill: 5000
- entries:
- key: header_match
value: route2
token_bucket:
fill_interval: 60s
max_tokens: 100
tokens_per_fill: 100
enable_x_ratelimit_headers: DRAFT_VERSION_03
filter_enabled:
default_value:
denominator: HUNDRED
numerator: 100
runtime_key: http_local_rate_limiter
filter_enforced:
default_value:
denominator: HUNDRED
numerator: 100
runtime_key: http_local_rate_limiter
response_headers_to_add:
- append: false
header:
key: x-local-rate-limit
value: "true"
stat_prefix: http
token_bucket:
fill_interval: 10s
max_tokens: 2147483647
tokens_per_fill: 2147483647
更多推荐
所有评论(0)