问题描述
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 {
---------
-------
}
}
我想为位置/login.info 添加速率限制,我尝试了location-snippet,但它在/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
为共享内存区域设置参数,该区域将保持状态 各种键。特别地,状态存储当前的数量 过分的要求。键可以包含文本、变量及其 组合。不考虑具有空键值的请求。