我已经在istio上实现了全局速率限制器,就像这篇文档一样-使用Istio实现全局速率限制。我试图弄清楚如何设置描述符,以便当特定IP(x.x.x.x)尝试访问特定路径(/xyz)时,它会立即受到速率限制。如果同一IP尝试不同路径或任何其他IP尝试任何路径,则允许每分钟100个请求
但是我的configmap和/或envoyfilter设置是错误的,因为我没有得到预期的输出
这是我的configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: ratelimit-config
data:
config.yaml: |
domain: frontend-ratelimit
descriptors:
- key: remote_address
value: x.x.x.x
descriptors:
- key: PATH
value: "/xyz"
rate_limit:
replaces:
- name: src_ip
unit: second
requests_per_unit: 0
- key: remote_address
rate_limit:
name: src_ip
unit: minute
requests_per_unit: 100
这里是envoyfilter与行动
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: filter-ratelimit-svc
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: VIRTUAL_HOST
match:
context: GATEWAY
routeConfiguration:
vhost:
name: ""
route:
action: ANY
patch:
operation: MERGE
# Applies the rate limit rules.
value:
rate_limits:
- actions:
- remote_address: {}
- request_headers:
header_name: :path
descriptor_key: PATH
- actions:
- remote_address: {}
我试过每次都用不同的操作块和描述符来改变configmap和envoyfilter,但我似乎从来没有让两个条件都工作过。总是其中一个条件按预期工作,而另一个条件似乎失败了
为了更好地概括我想达到的目标
1.当x.x.x.x尝试到达/xyz时,允许0请求
1.当x.x.x.x尝试到达任何路径时,允许100 req/min
1.当y.y.y.y尝试到达任何路径时,允许100 req/min
1条答案
按热度按时间qoefvg9y1#
我注意到的一件事是,在您的
filter-ratelimit-svc
文件中,您有:我遇到了类似的问题,当我将
- remote_address: {}
从第一个action
中移走,只在第二个动作中离开时,它才起作用。filter-ratelimit-svc
将是这样的:价值: