首页 > 解决方案 > 如何在asp.net core中实现基于用户类型的API速率限制

问题描述

我目前正在根据注册/非注册用户 IP 地址或 ASP.NET Core Web api 中的用户类型提供 API 速率限制。(即没有登录或登录客户端应用程序)。我尝试使用AspNETCoreRateLimit包,但无法从客户端应用程序动态更新客户端 ID。如果我们使用动态更新方法,它会更新现有的客户端 ID 规则,因此我们无法为新注册的用户创建新的客户端 ID 规则。任何人都可以建议克服这个问题或建议在 ASP.NET Core Web API 中处理速率限制的替代方法。

注意:应用程序将托管在 Kubernetes 集群中。请让我知道我们可以在入口控制器级别处理这个速率限制吗?

标签: c#asp.net-corekubernetes-ingressrate-limiting

解决方案


我不知道如何使用 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)


希望您觉得这个有帮助。


推荐阅读