如何使用 NGINX Service Mesh 进行速率限制

news2024/11/28 22:31:03

原文作者:NGINX

原文链接:如何使用 NGINX Service Mesh 进行速率限制

转载来源:NGINX 官方网站

 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

无论 HTTP 请求是恶意的(暴力破解密码或 DDoS 攻击)还是正常的(用户批量访问),大量的 HTTP 请求都有可能导致服务不堪重负,从而导致应用崩溃。这个问题有一个简单的解决办法:使用速率限制控制每个用户在特定时间段内的请求数量。然而,在 Kubernetes 环境中,到达某个 service 的大部分流量(即那些与其他 service 通信的流量)可能不在 Ingress controller 的权限范围内。在这种情况下,可以使用 service mesh 来设置速率限制策略。

借助 NGINX Service Mesh,您可以在 10 分钟内轻松完成速率限制的配置。

Demo:使用 NGINX Service Mesh 配置速率限制

Demo 使用三个插入 NGINX Service Mesh sidecar 的容器:一个后端 service、一个前端 service 和一个 bash 终端,同时还部署了 NGINX Service Mesh 控制平面。

前端 service 每秒都会向后端 service 发送一个请求,我们可以在前端 service 的日志中看到对这些请求的响应:

backend v1

backend v1

backend v1

backend v1

应用速率限制策略 (1:00)

假设我们不希望后端 service 接收这么多请求,我们可以将限速策略定义为具有以下字段的自定义资源:

  • destination —— 后端 service,接收请求的 service;

  • sources —— 前端 service,发出请求的客户端列表,每个客户端都实施了速率限制。此 demo 我们只定义一个 source。

  • rate —— 速率限制。此处为每分钟 10 个请求,或者每 6 秒钟 1 个请求。

相关代码您可以点击文章《如何使用 NGINX Service Mesh 进行速率限制》进行查看。

我们运行以下命令,以启用速率限制策略:

相关代码您可以点击文章《如何使用 NGINX Service Mesh 进行速率限制》进行查看。

在前端 service 的日志中,我们发现每 6 个请求中有 5 个被拒绝,并显示以下消息:

相关代码您可以点击文章《如何使用 NGINX Service Mesh 进行速率限制》进行查看。

将速率限制应用到所有客户端 (2:32)

速率限制仅适用于 sources 字段中指定的客户端(前端 service)。sources 字段未指定的其他客户端则不受速率限制,后端 service 依然会接受接受大量的未限制发送速率的客户端请求。我们可以通过在 bash 批量发送请求来查看;sources 字段未指定的其他客户端每个请求都会收到表示成功的 backend v1 响应。

怎么将速率限制应用到所有客户端?我们可以通过两种方法实现。第一种是将所有客户端的名称添加到 sources 字段中。在客户端较多的情况下,会相对复杂。第二种更为简单,删除 sources 字段,这样程序会识别所有客户端并加入速率限制策略。我们可以通过运行以下命令来编辑策略:

$ kubectl edit ratelimits.specs.smi.nginx.com backend-rate-limit

保存编辑好的策略后,我们再次从 bash 发出请求,发现其中超过速率限制的请求被拒绝,并显示如上所示的格式化的 503 错误。

允许突发请求 (3:43)

我们还可以将其他几个字段添加到策略中以自定义速率限制。我们知道有些应用是“突发流量”,这时它们会快速连续地发送多个请求。为此,我们可以添加 burst 字段。比如我们将 burst 字段设置为 3,这意味着后端 service 会在每 6 秒钟内接受多个额外的请求。超出此范围的请求均将被拒绝。

delay 字段用于控制如何将被允许的突发请求反馈到后端 service。如果没有该字段(即默认情况下),突发请求会根据速率限制排队处理,并与新请求交错发送。如果要立即处理突发请求,我们可以将 delay 字段的值设置为 nodelay。

您还可以将 delay 字段设置为整数。例如,如果我们将其设置为 3 并将 burst 字段增加到 5,那么在每 6 秒钟内,当发出 5 个或以上突发请求时,其中 3 个立即发送,2 个排队等待,其余将被拒绝。

我们设置 burst: 3 和 delay: nodelay ,在日志中观察效果。可以看到,在拒绝请求之前接受了三个额外的请求:

相关代码您可以点击文章如何使用 NGINX Service Mesh 进行速率限制进行查看。

取消速率限制 (6:30)

运行以下命令,禁用速率限制策略并接受所有请求:

$ kubectl delete -f rate-limit.yml

更多相关内容,您可以点击文章《如何使用 NGINX Service Mesh 进行速率限制》进行查看。


NGINX 唯一中文官方社区 ,尽在nginx.org.cn

关的技术干货、互动问答、系列课程、活动资源:

开源社区官网:https://www.nginx.org.cn/
微信公众号:https://mp.weixin.qq.com/s/XVE5yvDbmJtpV2alsIFwJg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day07--java高级编程:JDK8的新特性,JDK9的新特性,JDK10的新特性,JDK11的新特性,JDK15的新特性

1 JDK8的其它新特性 说明:一些8中的新特性在,java高级部分学习的同时顺便讲过了。 1.1 JDK8新特性的总体结构 1.2 Java 8新特性简介 1.3 Lambda表达式 1.3.1 出现背景 1.3.2 Lambda表达式的使用举例 package com.atguigu.java1;import org.junit.Tes…

2023年软件测试简历没有邀约?为什么?8类细节通通告诉你(附赠高薪简历)

求职不顺,没有邀约,大概率是你的简历出现了问题。 本篇文章列出高薪简历应该注意的细节,合计36处,涉及简历的八大组成部分。 现在就讲: 一、简历样式要求(3点要求) 1、简历格式,…

某游戏登录密码加密,webpack

注意:文章内容仅用于学习和技术交流,切勿做出违法的事情,如有侵权请联系我删除。 网址(今天的大冤种):aHR0cHM6Ly93d3cuZ205OS5jb20v 一,分析 从上面图片可以看到,他的密码是加密了…

FinGPT:以数据为中心的方法革新开源金融

FinGPT 由 AI4Finance Foundation 开发,是一种以数据为中心的工具,可使大型语言模型 (LLM) 的金融数据民主化。它旨在成为开放式金融的开源解决方案,旨在彻底改变金融业。本文将深入探讨 FinGPT 的复杂性、它的好处,以及它如何成为…

vscode使用latex环境无法编译,是否与anaconda环境冲突

Vscode使用latex环境无法编译,是否与anaconda环境冲突 在 VSCode 中使用 LaTeX 环境无法编译,可能与 Anaconda 环境冲突。这是因为 Anaconda 默认会将环境变量PATH 设置为 Anaconda 所在的路径,如果你使用的是 Anaconda 内置的 Python环境&am…

如何三分钟快速制作自定义ppt

目录 利用ChatGPTMindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果: 更好地提问ChatGPT_常用prompt表_小黄同学LL的博客-CSDN博客 举个栗子: 利用ChatGPTMindShow三分钟生成PPT 提词:…

LeCun世界模型出场!Meta震撼发布首个「类人」模型,理解世界后补全半张图,自监督学习众望所归

LeCun世界模型出场!Meta震撼发布首个「类人」模型,理解世界后补全半张图,自监督学习众望所归 原创 新智元 新智元 2023-06-14 12:19 发表于北京 【新智元导读】LeCun的世界模型终于来了,可谓是众望所归。既然大模型已经学会了理解…

Unity入门6——光源组件

一、参数面板 二、参数介绍 Type:光源类型 Spot:聚光灯 Range:发光距离Spot Angle:光锥角度Directional:方向光Point:点光源Area(Baked Only):面光源 仅烘焙。预先算好&…

如何选择好用的效果图渲染平台

在现代的建筑设计、室内设计、电影动画等行业中,效果图已经成为了一个重要的工具,能够帮助设计师和制作人员更好地呈现他们的想法和概念。而要制作出高质量的效果图,一个好用的效果图渲染平台是非常必要的。 如何选择好用的效果图渲染平台呢…

【Flutter】Flutter 如何获取安装来源信息

文章目录 一、 前言二、 安装来源信息的基本概念1. 什么是安装来源信息2. 为什么我们需要获取安装来源信息 三、 如何在 Flutter 中获取安装来源信息1. 准备工作2. 安装必要的依赖库3. 编写代码获取安装来源信息 四、 完整示例代码五、总结 一、 前言 在这篇文章中&#xff0c…

图像处理实战01-OpenCV 入门指南

Python OpenCV 入门指南 OpenCV是一个强大的计算机视觉库,它可以用于处理图像和视频数据,以及进行目标检测和跟踪等任务。,将学会如何使用Python编写OpenCV代码来进行基础和进阶的图像处理和分析。 学习OpenCV可以帮助你掌握基本的图像处理…

(哈希表) 1002. 查找共用字符 ——【Leetcode每日一题】

❓1002. 查找共用字符 难度:简单 给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。 示例 1: 输入&…

Apache Hive安装部署

Apache Hive安装部署 🚃Hive元数据 描述数据的数据,主要描述数据属性信息,用来支持如指示存储位置,历史数据,资源查找,文件记录等功能。存储在关系型数据库中。如hive内置Derby,或第三方MySql…

微服务: 00-rabbitmq出现的异常以及解决方案

目录 前言: 问题概述: 1. rabbitmq初始安装配置异常 -> 1.1 rabbitmq报您与此网站连接不是私密连接 --->1.1.1 上述问题解决方案 ---> 1.1.2 依次执行下面代码 -> 1.2 解决用户的No access情况 -> 1.2.1 使用设置的账号密码进行登录 -> 1.2.2 点击 Ad…

参加完京东的面试,感觉面试官有点菜...

前言 去年年底面试了京东,现整理面经,希望各位不要觉得太迟(这该死的拖延症???)。 没有截图是因为他根本没给我发邮件,直接boss开聊的,但是boss的聊天记录只有30天,此处点名批评下&#xf…

VMware Tools 12.2.5 发布下载 - 虚拟机必备工具

VMware Tools 12.2.5 发布下载 - 虚拟机必备工具 请访问原文链接:https://sysin.org/blog/vmware-tools-12/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 简介 VMware Tools 中包含一系列服务和组件&#xff0c…

ThreadLocal了解

文章目录 概述源码原理内存泄露应用场景 概述 ThreadLocal提供线程的局部变量,这种变量与普通变量的区别在于,每个访问这种变量的线程都有自己的、独立的变量副本。用于解决多线程间的数据隔离问题。 源码 //返回Thread实例的成员变量threadLocals Th…

Pytest教程__测试用例的执行方式(2)

在pytest框架中,编写测试用例有如下约束: 所有的测试用例文件名都需要满足test_*.py格式或*_test.py格式。在测试用例文件中,测试类以Test开头,并且不能带有__init__方法,否则pytest不会执行该class。在测用例的class…

企业如何选择最佳的CDN服务?

根据研究表明,47%的客户更喜欢能在2秒内加载完成的网页,不仅如此,如果一个网站的加载时间超过3秒,那么40%的访问者会毫不犹豫的离开你的网站。所以使用正确的内容交付网络对初创公司尤为关键。它有助于实现快速、安全的内容交付。…

10_python——模块

目录 模块的概述 自定义模块 Python中的包 以主程序的形式执行 引用其他模块 模块的概述 什么是模块:在python中模块就是python程序,一个模块就是一个*.py的文件,通常情况下把能够实现某一特定功能的代码放置在一个文件中作为一个模块&…