前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ingress Nginx限流

Ingress Nginx限流

作者头像
shysh95
发布2024-01-02 13:13:43
3870
发布2024-01-02 13:13:43
举报
文章被收录于专栏:shysh95shysh95

Hi~朋友,关注置顶防止错过消息

为什么需要限流

为了防止接口被恶意请求,我们可以在Ingress Nginx网关上增加一个限流。

Nginx的限流

Nginx中的限流模块主要使用limit_req指令实现。

Nginx限流配置

1. 首先我们需要在http模块中使用limitreqzone定义一个共享内存区域,该共享内存区域记录了限流key的访问频率:

代码语言:javascript
复制
http {
 
    limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=5r/s;
 
}

  • zone=iplimit:10m,指定了共享内存区域的名称为iplimit,并为其分配10MB的内存空间
  • rate:rate参数用来指定请求速率,上述示例中限速每秒钟5次
  • binaryremoteaddr:这里指定限流的key是客户端的IP地址二进制表现形式,如果是IP+uri的形式后面可以再跟上uri

2. 使用limit_req指令为location配置具体的请求限制:

代码语言:javascript
复制
location / {
 
    limit_req zone=ip_limit burst=5 nodelay;
 
}

  • zone:指定了使用的共享内存区域的名称
  • burst:指定了在超过指定速率限制以后允许的1s内最大突发请求次数,该参数受nodelay参数的影响
  • nodelay:该参数有两个值off和on,默认为off,表示启用延迟模式,该模式下burst参数会生效,如果修改为on表示禁用延迟模式,一旦超过速率限制,请求会被立即拒绝

Kubernetes Nginx中限流配置

1. 在Ingress Nginx的ingress-nginx-controller中定义共享内存区域:

代码语言:javascript
复制
kind: ConfigMap
 
apiVersion: v1
 
metadata:
 
  name: ingress-nginx-controller
 
namespace: ingress-nginx
 
...
 
data:
 
...
 
  http-snippet: |
 
    limit_req_zone  
b
i
n
a
r
y
r
e
m
o
t
e
a
d
d
r
 uri zone=ip_uri_limit:10m rate=10r/s; 
..
 

2. 在相应的ingress中配置使用 nginx.ingress.kubernetes.io/configuration-snippet注解指定limit_req

代码语言:javascript
复制
kind: Ingress
 
apiVersion: networking.k8s.io/v1
 
metadata:
 
  name: xxxx
 
  annotations:
 
.....
 
    nginx.ingress.kubernetes.io/configuration-snippet: |
 
      limit_req zone=ip_uri_limit burst=10 nodelay;
 
spec:
 
  ingressClassName: nginx
 
  tls:
 
...
 
  rules:
 
- host: xxx
 
....

测试和监控

测试工具我使用的wrk压测工具,它可以同时并发的向我们的网关发送请求。

上线限流规则以后一定要注意监控,默认的触发限流nginx会返回503错误,一定要注意限流参数的设置,防止误触。

对于更高级别的防护大家可以考虑使用WAF产品,WAF本人也不熟悉,就暂时不过多叙述。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档