Description
Migrated from OSS kgateway-dev#8699
Gloo Edge Product
Enterprise
Gloo Edge Version
v1.14.7
Is your feature request related to a problem? Please describe.
Customer would like to define 2 levels of ratelimits, first based on org and package, the second based on org and integrator. For example limit of 5 requests/min for Integrator and 10 requests/min for Org. Currently if Integrator1 does 8 requests he gets 429 after request 5 for the last 3 requests. If in the same minute Integrator 2 tries to do 5 requests he starts getting 429 after 2 requests as also the ratelimited requests are counted for the package level ratelimit.
Example ratelimitconfigs:
apiVersion: ratelimit.solo.io/v1alpha1
kind: RateLimitConfig
metadata:
name: rl
namespace: gloo-system
spec:
raw:
rateLimits:
- setActions:
- requestHeaders:
descriptorKey: odyssey-org
headerName: x-odc-org
- requestHeaders:
descriptorKey: odyssey-package
headerName: x-odc-rb
setDescriptors:
- rateLimit:
requestsPerUnit: 10
unit: MINUTE
simpleDescriptors:
- key: odyssey-org
- key: odyssey-package
value: basic
---
apiVersion: ratelimit.solo.io/v1alpha1
kind: RateLimitConfig
metadata:
name: rl2
namespace: gloo-system
spec:
raw:
rateLimits:
- setActions:
- requestHeaders:
descriptorKey: odyssey-int
headerName: x-odc-int
- requestHeaders:
descriptorKey: odyssey-package
headerName: x-odc-rb
setDescriptors:
- rateLimit:
requestsPerUnit: 5
unit: MINUTE
simpleDescriptors:
- key: odyssey-int
- key: odyssey-package
value: basic
Describe the solution you'd like
A flag for specific descriptor that would tell that requests ratelimited based on this descriptor should not increase any counters.
Describe alternatives you've considered
Using envoy ratelimit API instead of the set-style with nested descriptors and weight on the integrator descriptor:
apiVersion: ratelimit.solo.io/v1alpha1
kind: RateLimitConfig
metadata:
name: rl
namespace: gloo-system
spec:
raw:
rateLimits:
- actions:
- requestHeaders:
descriptorKey: odyssey-org
headerName: x-odc-org
- requestHeaders:
descriptorKey: odyssey-package
headerName: x-odc-rb
- actions:
- requestHeaders:
descriptorKey: odyssey-org
headerName: x-odc-org
- requestHeaders:
descriptorKey: odyssey-package
headerName: x-odc-rb
- requestHeaders:
descriptorKey: odyssey-int
headerName: x-odc-int
descriptors:
- key: odyssey-org
descriptors:
- rateLimit:
requestsPerUnit: 10
unit: MINUTE
key: odyssey-package
value: basic
descriptors:
- rateLimit:
requestsPerUnit: 5
unit: MINUTE
weight: 1
key: odyssey-int
This does not server the purpose as any number of integrators can do 5 requests regardless of their package as only counter for the descriptor with non-zero weight is increased.
Additional Context
No response