Încerc să implementez o limită globală de rată pentru conexiunile tcp prin gateway-ul de intrare istio.Am urmat documentele oficiale pentru implementarea unui serviciu global de limitare a ratei http și am reușit să-l fac să funcționeze https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/, dar nu gestionează conexiunile TCP.
Iată configurațiile limitei ratei http
apiVersion: networking.istio.io/v1alpha3
fel: EnvoyFilter
metadate:
nume: filter-ratelimit
#namespace: istio-ingress
specificație:
workloadSelector:
# selectați după etichetă în același spațiu de nume
etichete:
istio: intrare
configPatches:
# Configurația Envoy pe care doriți să o modificați
- applyTo: HTTP_FILTER
Meci:
context: GATEWAY
ascultător:
filterChain:
filtru:
nume: „envoy.filters.network.http_connection_manager”
subfiltru:
nume: „envoy.filters.http.router”
plasture:
operațiune: INSERT_BEFORE
# Adaugă filtrul Envoy Rate Limit în lanțul de filtre HTTP.
valoare:
nume: envoy.filters.http.ratelimit
typed_config:
„@type”: type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
# domeniul poate fi orice! Potriviți-l cu configurația serviciului ratelimter
domeniu: ctfd-ratelimit
failure_mode_deny: adevărat
timeout: 10s
rate_limit_service:
grpc_service:
envoy_grpc:
nume_cluster: rate_limit_cluster
timeout: 10s
transport_api_version: V3
- applyTo: CLUSTER
Meci:
context: GATEWAY
cluster:
serviciu: ratelimit.istio-ingress.svc.cluster.local
plasture:
operațiune: ADD
# Adaugă clusterul de servicii cu limită de rată pentru serviciul cu limită de rată definit la pasul 1.
valoare:
nume: rate_limit_cluster
tip: STRICT_DNS
connect_timeout: 10s
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
nume_cluster: rate_limit_cluster
puncte finale:
- lb_endpoints:
- punct final:
abordare:
adresa_socket:
adresa: ratelimit.istio-ingress.svc.cluster.local
valoarea_portului: 8081
apiVersion: networking.istio.io/v1alpha3
fel: EnvoyFilter
metadate:
nume: filter-ratelimit-svc
#namespace: istio-ingress
specificație:
workloadSelector:
etichete:
istio: intrare
configPatches:
- aplicați la: VIRTUAL_HOST
Meci:
context: GATEWAY
routeConfiguration:
vhost:
Nume: ""
traseu:
acțiune: ORICE
plasture:
operațiune: MERGE
# Aplică regulile limitei ratei.
valoare:
rate_limits:
- acțiuni: # orice acțiuni aici
- request_headers:
header_name: ":cale"
descriptor_key: „CALEA”
apiVersion: v1
fel: ConfigMap
metadate:
nume: ratelimit-config
date:
config.yaml: |
domeniu: tcp-ratelimit
descriptori:
- cheie: CALEA
rate_limit:
unitate: minut
cereri_per_unitate: 1
Am început să schimb referințele filtrului Envoy pentru a fi mai bazate pe rețea, dar nu sunt sigur ce altceva îmi lipsește sau dacă acesta este chiar modul corect de a proceda. Iată ce am schimbat până acum față de configurația anterioară
apiVersion: networking.istio.io/v1alpha3
fel: EnvoyFilter
metadate:
nume: filter-ratelimit
#namespace: istio-ingress
specificație:
workloadSelector:
# selectați după etichetă în același spațiu de nume
etichete:
istio: intrare
configPatches:
# Configurația Envoy pe care doriți să o modificați
- applyTo: NETWORK_FILTER
Meci:
context: GATEWAY
ascultător:
filterChain:
filtru:
nume: „envoy.filters.network.ratelimit”
plasture:
operațiune: INSERT_BEFORE
# Adaugă filtrul Envoy Rate Limit în lanțul de filtre HTTP.
valoare:
nume: envoy.filters.network.ratelimit
typed_config:
„@type”: type.googleapis.com/envoy.extensions.filters.network.ratelimit.v3.RateLimit
# domeniul poate fi orice! Potriviți-l cu configurația serviciului ratelimter
domeniu: tcp-ratelimit
failure_mode_deny: adevărat
timeout: 10s
rate_limit_service:
grpc_service:
envoy_grpc:
nume_cluster: rate_limit_cluster
timeout: 10s
transport_api_version: V3
- applyTo: CLUSTER
Meci:
context: GATEWAY
cluster:
serviciu: ratelimit.istio-ingress.svc.cluster.local
plasture:
operațiune: ADD
# Adaugă clusterul de servicii cu limită de rată pentru serviciul cu limită de rată definit la pasul 1.
valoare:
nume: rate_limit_cluster
tip: STRICT_DNS
connect_timeout: 10s
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
nume_cluster: rate_limit_cluster
puncte finale:
- lb_endpoints:
- punct final:
abordare:
adresa_socket:
adresa: ratelimit.istio-ingress.svc.cluster.local
valoarea_portului: 8081
Este chiar posibil ceea ce încerc să fac?