C# 如何根据用户类型在asp.net内核中实现API速率限制

C# 如何根据用户类型在asp.net内核中实现API速率限制,c#,asp.net-core,kubernetes-ingress,rate-limiting,C#,Asp.net Core,Kubernetes Ingress,Rate Limiting,我目前正在根据ASP.NET核心Web API中的注册/非注册用户IP地址或用户类型提供API速率限制。(即无需登录或登录客户端应用程序)。我已尝试使用该包,但无法从客户端应用程序动态更新客户端id。如果我们使用动态更新方法,它会更新现有的客户机ID规则,因此我们无法为新注册的用户创建新的客户机ID规则。有谁能建议克服这个问题,或者建议在ASP.NET核心web API中处理费率限制的替代方法吗 注意:应用程序将驻留在Kubernetes集群中。请让我知道我们可以在Ingress控制器级别处理此

我目前正在根据ASP.NET核心Web API中的注册/非注册用户IP地址或用户类型提供API速率限制。(即无需登录或登录客户端应用程序)。我已尝试使用该包,但无法从客户端应用程序动态更新客户端id。如果我们使用动态更新方法,它会更新现有的客户机ID规则,因此我们无法为新注册的用户创建新的客户机ID规则。有谁能建议克服这个问题,或者建议在ASP.NET核心web API中处理费率限制的替代方法吗


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

我不知道如何使用ASP.NET Core,但正如以下文档中所述,您应该能够在Ingress级别处理此速率限制

Kubernetes ingress

关于这一点,我的看法是肯定的

速率限制

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

nginx.ingres.kubernetes.io/limit-connections:单个IP地址允许的并发连接数。超过此限制时返回503错误

nginx.ingres.kubernetes.io/limit-rps:每秒从给定IP接受的请求数。突发限制设置为限制的5倍。当客户端超过此限制时,返回默认值:503

nginx.ingres.kubernetes.io/limit-rpm:每分钟从给定IP接受的请求数。突发限制设置为限制的5倍。当客户端超过此限制时,返回默认值:503

nginx.ingres.kubernetes.io/limit-rate-after:初始千字节数,在此数之后,对给定连接的响应的进一步传输将受到速率限制。此功能必须在启用的情况下使用

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

nginx.ingres.kubernetes.io/limit-whitelist:要从速率限制中排除的客户端IP源范围。该值是以逗号分隔的CIDR列表。 如果在单个入口规则中指定多个注释,则限制将应用于顺序限制连接、限制rpm、限制rps

要全局配置所有入口规则的设置,可在中设置限制速率和限制速率值。入口注释中设置的值将覆盖全局设置

启用时,将根据X-Forwarded-For报头值的使用或从中设置客户端IP地址

对于使用Kubernetes入口的Kubernetes应用程序,有一个关于速率限制的中等标准


Nginx入口

关于这一点,我的看法是肯定的


如果您不明白我为什么同时提到kubernetes和nginx ingress,请看一看

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



希望您觉得这很有用。

谢谢@jt97。是的,我们可以使用nginx入口控制器设置Kubernetes级别的速率限制。在我的例子中,我想根据用户类型提供费率限制。然而,我正在asp.net核心控制器端实现它,现在正在对它进行测试。