iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >nginx ingress限速那些事浅析
  • 845
分享到

nginx ingress限速那些事浅析

nginx ingress限速nginx ingress 2023-05-15 17:05:51 845人浏览 泡泡鱼
摘要

目录从业务场景出发什么是限速?为什么要限速?在Nginx ingress的yaml文件里,都有哪些配置?从业务场景出发 在业务开发过程中,我们有个需求是:通过filebrowser

从业务场景出发

在业务开发过程中,我们有个需求是:通过filebrowser提供的下载服务需要进行限速处理。如用户在通过filebrowser进行文件下载的时候,需要限制每个用户的下载速率。从这个需求扩展开来,也可以限定特定用户的下载速率。

为了实现这个业务需求,结合我们当前的技术栈(k8s + nginx ingress),可以通过配置相应的nginx参数来实现。

什么是限速?

限速,顾名思义,是限制速率。

这里的速率可以是:

  • 单个用户在单位时间内访问资源的频率,
  • 也可以是单个ip在单位时间内访问资源的频率,
  • 还可以是单位时间内指定连接的传输速率。

通常,后者的业务场景存在于下载限速

为什么要限速?

限速的本质是保证公平。

在带宽资源有限的情况下,尽可能地保障每个用户能被合理的分配足够的带宽值。也可以在带宽资源有限的情况下,通过限速的方式,服务更多的用户。

另外,限速还可以大大缓解分布式拒绝服务攻击(DDOS)带来的影响。

在nginx ingress的yaml文件里,都有哪些配置?

Nginx ingress的限速配置基本可以在ingress的nginx.ingress.kubernetes.io注解里可以找到。

下面,对和限速相关的注解进行逐一解读:

  • nginx.ingress.kubernetes.io/limit-connections:单个IP地址可以同时并发连接的个数。如果超过连接并发数,则返回503错误。
  • nginx.ingress.kubernetes.io/limit-rps:限制单个IP每秒钟的请求数(limit request per second)。超出限制,返回503错误。需要注意的是,并不是立刻超出该配置设定的值就马上出现503错误,nginx允许在一定时间范围内的突发请求数的存在(突发请求数 = limit-rps * limit-burst-multiplier)。那么什么时候会出现503呢?这就要从nginx的限流模型展开了。nginx的限流模型就是一个队列(参考线程池的队列模型模型),限流的max连接数=队列处理的能力+队列长度,即max-connections-per-second=limit-rps+limit-rps*limit-burst-multiplier。
  • nginx.ingress.kubernetes.io/limit-rpm:同limit-rps,不过limit-rpm的优先级高于limit-rps,也就是说当同时设置了limit-rpm和limit-rps,以limit-rpm为准。不过当limit-connections也设置了,那么limit-connections的优先级最高。
  • nginx.ingress.kubernetes.io/limit-burst-multiplier:突发请求大小的系数,主要用来定义连接的队列长度,默认是5
  • nginx.ingress.kubernetes.io/limit-rate-after:超过多少流量后执行限速(limit-rate),单位是KB
  • nginx.ingress.kubernetes.io/limit-rate:单个连接每秒的限速值,单位是KB。
  • nginx.ingress.kubernetes.io/limit-whitelist:设定IP白名单,在该白名单内的IP不被限速,支持CIDR,多个IP可用逗号隔开。

注意

  • 当limit-connections, limit-rps, limit-rpm同时设定时,优先级是limit-connections>limit-rpm>limit-rps
  • limit-rate-after和limit-rate生效的前提是 nginx.ingress.kubernetes.io/proxy-buffering: "on"
  • 以上提到的IP,需要区分来自SLB还是真实的用户IP,获取真实的用户IP,可以参考这里

4. 针对业务需求的方案

搞清楚了这些知识点后,再回到我们的业务本身,可以简单的在业务ingress的配置文件中添加以下配置即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ...
    nginx.ingress.kubernetes.io/proxy-buffering: on
    nginx.ingress.kubernetes.io/limit-rate: 10 # 单位是KB
  name: xxx
  namespace: yyy
spec:
  ingressClassName: nginx
  rules:
    ...

参考:

  • Introduction - NGINX Ingress Controller
  • NGINX Rate Limiting

以上就是nginx ingress限速那些事浅析的详细内容,更多关于nginx ingress限速的资料请关注编程网其它相关文章!

--结束END--

本文标题: nginx ingress限速那些事浅析

本文链接: https://www.lsjlt.com/news/209317.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nginx ingress限速那些事浅析
    目录从业务场景出发什么是限速?为什么要限速?在nginx ingress的yaml文件里,都有哪些配置?从业务场景出发 在业务开发过程中,我们有个需求是:通过filebrowser...
    99+
    2023-05-15
    nginx ingress限速 nginx ingress
  • nginx ingress限速怎么配置
    本篇内容介绍了“nginx ingress限速怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从业务场景出发在业务开发过程中...
    99+
    2023-07-06
  • 浅析C++中模板的那点事
    1.什么是模板 假设现在我们完成这样的函数,给定两个数x和y求式子x^2 + y^2 + x * y的值 .考虑到x和y可能是 int , float 或者double类型,那么我们...
    99+
    2022-11-15
    C++ 模板
  • 浅谈React Router关于history的那些事
    如果你想理解React Router,那么应该先理解history。更确切地说,是history这个为React Router提供核心功能的包。它能轻松地在客户端为项目添加基于loc...
    99+
    2024-04-02
  • Java和Docker限制的那些事儿
    作者:kelvinjin2009 来源:程序师原文链接:http://www.techug.com/post/java-and-docker-memory-limits.html Java和Docker不是天然的朋友。 Docker可以设置...
    99+
    2023-06-04
  • C# 解析Excel中的那些事儿
    在C#中解析Excel文件是一个常见的任务,可以使用一些类库来实现。1. 使用Microsoft Office Interop Ex...
    99+
    2023-09-09
    C#
  • 浅谈 Python 网络爬虫的那些事(文末送书7.0)
    文章目录 📋前言🎯什么是网络爬虫🧩 网络爬虫概述 🎯爬虫案例🧩代码案例 🔥文末送书&#x...
    99+
    2023-09-20
    python 爬虫 开发语言 网络爬虫 Beautiful Soup 网络请求 原力计划
  • 什么是模块化?深析node模块化的那些事
    在上方的定义中未免有一些晦涩难懂,简单的给大家举个例子:我们小时候玩的小霸王游戏机,当我们玩烦了一款游戏的时候,我们不可能直接更换一个游戏机呀,我们可以通过更换游戏带从而体验各种不同的游戏。这种形式就是模块化,把游戏分化成一个个小模块,当我...
    99+
    2023-05-14
    node 模块化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作