【问题标题】:How to implement API rate limit in asp.net core based on user type如何在asp.net core中实现基于用户类型的API速率限制
【发布时间】:2020-08-07 10:04:31
【问题描述】:

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

注意:应用程序将托管在 Kubernetes 集群中。请让我知道我们可以在 Ingress-controller 级别处理此速率限制吗?

【问题讨论】:

    标签: c# asp.net-core kubernetes-ingress rate-limiting


    【解决方案1】:

    我不知道如何使用 ASP.NET Core 执行此操作,但正如以下文档中所述,您应该能够在入口级别执行此操作。

    Kubernetes 入口

    kubernetes ingress 中有documentation

    速率限制

    这些注释定义了连接和传输速率的限制。这些可用于缓解DDoS Attacks

    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:初始千字节数,在此之后对给定连接的响应的进一步传输将受到速率限制。此功能必须在启用proxy-buffering 的情况下使用。

    nginx.ingress.kubernetes.io/limit-rate:每秒允许发送到给定连接的千字节数。零值禁用速率限制。此功能必须在启用proxy-buffering 的情况下使用。

    nginx.ingress.kubernetes.io/limit-whitelist:客户端IP源范围排除在速率限制之外。该值是一个逗号分隔的 CIDR 列表。 如果您在单个 Ingress 规则中指定多个注解,则会按照 limit-connections、limit-rpm、limit-rps 的顺序应用限制。

    要为所有 Ingress 规则全局配置设置,可以在 NGINX ConfigMap 中设置 limit-rate-after 和 limit-rate 值。 Ingress 注解中设置的值将覆盖全局设置。

    客户端 IP 地址将根据 PROXY protocol 的使用或 use-forwarded-headers 启用时的 X-Forwarded-For 标头值设置。

    关于使用 kubernetes 入口的 Kubernetes 应用程序的速率限制,有中等 tutorial


    Nginx 入口

    nginx ingress 中有documentation


    如果你对我为什么同时提到 kubernetes 和 nginx ingress 感到困惑,请查看here

    有两种流行的 Kubernetes Ingress 控制器使用 NGINX——它们都是开源的并且托管在 GitHub 上。一个由 Kubernetes 开源社区维护(GitHub 上的 kubernetes/ingress-nginx),一个由 NGINX, Inc. 维护(GitHub 上的 nginxinc/kubernetes-ingress)


    希望你觉得这很有用。

    【讨论】:

    • 谢谢@jt97。是的,我们可以使用 nginx 入口控制器在 Kubernetes 级别设置速率限制。就我而言,我想根据用户类型提供速率限制。但是,我正在努力在 asp.net 核心控制器端实现它,现在对其进行测试。
    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 2021-12-12
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多