#istio #rate-limiting #envoyproxy #ratelimit
Вопрос:
Попытка реализовать ограничение скорости с помощью Istio EnvoyFilter. Ограничение скорости обслуживания работает нормально. Но не удалось настроить ограничение скорости для любого из подпутей моей службы. Например, «/страница продукта » и «/api/v1/продукты » по-прежнему ограничивают скорость на уровне обслуживания.
Ниже приведена конфигурация Istio EnvoyFilter с демонстрационным проектом Istio Bookinfo, пожалуйста, дайте мне знать, если возникнут какие-либо проблемы с конфигурацией.
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|9080"
route:
action: ANY
patch:
operation: MERGE
value:
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
"@type": type.googleapis.com/udpa.type.v1.TypedStruct
type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
value:
rate_limits:
- actions:
- request_headers:
header_name: ":path"
descriptor_key: path
stat_prefix: http_local_rate_limiter
token_bucket:
max_tokens: 5
tokens_per_fill: 5
fill_interval: 60s
filter_enabled:
runtime_key: local_rate_limit_enabled
default_value:
numerator: 100
denominator: HUNDRED
filter_enforced:
runtime_key: local_rate_limit_enforced
default_value:
numerator: 100
denominator: HUNDRED
response_headers_to_add:
- append: false
header:
key: x-local-rate-limit
value: "true"
descriptors:
- entries:
- key: path
value: /productpage
token_bucket:
max_tokens: 3
tokens_per_fill: 3
fill_interval: 60s
- entries:
- key: path
value: /api/v1/products
token_bucket:
max_tokens: 2
tokens_per_fill: 2
fill_interval: 60s
Устранено действием ограничения скорости перемещения, как показано ниже:
- applyTo: HTTP_ROUTE
match:
context: SIDECAR_INBOUND
routeConfiguration:
vhost:
name: "inbound|http|9080"
route:
action: ANY
patch:
operation: MERGE
value:
route:
rate_limits:
- actions:
- request_headers:
header_name: ":path"
descriptor_key: path
Ответ №1:
Разрешите эту проблему, переместив действие ограничения скорости, как показано ниже:
- applyTo: HTTP_ROUTE
match:
context: SIDECAR_INBOUND
routeConfiguration:
vhost:
name: "inbound|http|9080"
route:
action: ANY
patch:
operation: MERGE
value:
route:
rate_limits:
- actions:
- request_headers:
header_name: ":path"
descriptor_key: path