c# - 如何在asp.net core中实现基于用户类型的API速率限制
问题描述
我目前正在根据注册/非注册用户 IP 地址或 ASP.NET Core Web api 中的用户类型提供 API 速率限制。(即没有登录或登录客户端应用程序)。我尝试使用AspNETCoreRateLimit包,但无法从客户端应用程序动态更新客户端 ID。如果我们使用动态更新方法,它会更新现有的客户端 ID 规则,因此我们无法为新注册的用户创建新的客户端 ID 规则。任何人都可以建议克服这个问题或建议在 ASP.NET Core Web API 中处理速率限制的替代方法。
注意:应用程序将托管在 Kubernetes 集群中。请让我知道我们可以在入口控制器级别处理这个速率限制吗?
解决方案
我不知道如何使用 ASP.NET Core 来做到这一点,但正如下面的文档中所提到的,你应该能够在入口级别做到这一点。
Kubernetes 入口
kubernetes ingress中有关于此的文档。
速率限制
这些注释定义了连接和传输速率的限制。这些可用于缓解DDoS 攻击。
nginx.ingress.kubernetes.io/limit-connections:单个 IP 地址允许的并发连接数。超过此限制时返回 503 错误。
nginx.ingress.kubernetes.io/limit-rps:每秒从给定 IP 接受的请求数。突发限制设置为限制的 5 倍。当客户端超过此限制时,返回limit-req-status-code default: 503。
nginx.ingress.kubernetes.io/limit-rpm:每分钟从给定 IP 接受的请求数。突发限制设置为限制的 5 倍。当客户端超过此限制时,返回limit-req-status-code default: 503。
nginx.ingress.kubernetes.io/limit-rate-after:初始千字节数,之后对给定连接的响应的进一步传输将受到速率限制。此功能必须在启用代理缓冲的情况下使用。
nginx.ingress.kubernetes.io/limit-rate:每秒允许发送到给定连接的千字节数。零值禁用速率限制。此功能必须在启用代理缓冲的情况下使用。
nginx.ingress.kubernetes.io/limit-whitelist:客户端IP源范围排除在速率限制之外。该值是一个逗号分隔的 CIDR 列表。如果您在单个 Ingress 规则中指定多个注释,则会按顺序限制连接、限制转速、限制 rps 应用限制。
要为所有 Ingress 规则全局配置设置,可以在NGINX ConfigMap中设置 limit-rate-after 和 limit-rate 值。Ingress 注解中设置的值将覆盖全局设置。
客户端 IP 地址将基于PROXY 协议的使用或启用use-forwarded-headers时从 X-Forwarded-For 标头值设置。
有关于使用 kubernetes 入口的 Kubernetes 应用程序的速率限制的中等教程。
Nginx 入口
在nginx ingress中有关于此的文档。
如果你对我为什么同时提到 kubernetes 和 nginx ingress 感到困惑,请看这里
有两种流行的 Kubernetes Ingress 控制器使用 NGINX——它们都是开源的并且托管在 GitHub 上。一个由 Kubernetes 开源社区维护(GitHub 上的 kubernetes/ingress-nginx),一个由 NGINX, Inc. 维护(GitHub 上的 nginxinc/kubernetes-ingress)
希望您觉得这个有帮助。
推荐阅读
- sql - 为指向同一个表的两个 id 字段显示两个链接值
- jsonschema - 顶级 JSON-SCHEMA 任意名称
- webpack - 运行 ng build --prod 时无法读取未定义的属性“替换”
- zabbix - zabbix如何监控服务器打开文件的数量
- r - 在R中使用ggplot填充行之间的区域
- ag-grid - Ag-Grid React:行闪存而不是单元闪存
- r - 在 Visual Studio Code 中为 R 定义键绑定
- python-3.x - 在 Python3 中交换列表交换引用中的值吗?
- php - 如何使用 php 在 mandrill 中使用电子邮件标签(用于跟踪电子邮件)
- sql - SQL 查询仅获取具有特定类型的记录