我有一个类似下面的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress-rules-login
annotations:
kubernetes.io/ingress.class: 'nginx'
nginx.ingress.kubernetes.io/proxy-body-size: '0'
spec:
rules:
- host: staging.mysite.com
http:
paths:
- path: /
backend:
serviceName: login
servicePort: 80
- path: /login/info
backend:
serviceName: login
servicePort: 80
nginx.conf类似于
server {
location / {
---------
---------
}
location /login/info {
---------
-------
}
}
我想添加location/login.info的速率限制,我尝试了locationsnippet,但它在/login/info中创建了嵌套的位置,这个api的结果是404,有什么方法可以做到吗?
这是一个社区wiki答案,请随意编辑和扩展。
由于我们缺乏有关您的配置的一些细节,我将解释您如何处理这一问题。
您可以使用以下注释来添加自定义位置块:
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=authentication_ratelimit nodelay;
然后使用映射,例如:
http-snippets: |
map $uri $with_limit_req {
default 0;
"~*^/authenticate$" 1;
}
map $with_limit_req $auth_limit_req_key {
default '';
'1' $binary_remote_addr; # the limit key
}
limit_req_zone $auth_limit_req_key zone=authentication_ratelimit:10m rate=1r/s;
注意:
Syntax: limit_req_zone key zone=name:size rate=rate [sync]; Default: — Context: http
设置共享内存区域的参数,该区域将保留各种按键。特别是,该状态存储请求过多。键可以包含文本、变量及其结合体键值为空的请求不会被计入。