- Notifications
You must be signed in to change notification settings - Fork8
Description
Migrated from OSSkgateway-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/v1alpha1kind: RateLimitConfigmetadata: name: rl namespace: gloo-systemspec: 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/v1alpha1kind: RateLimitConfigmetadata: name: rl2 namespace: gloo-systemspec: 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/v1alpha1kind: RateLimitConfigmetadata: name: rl namespace: gloo-systemspec: 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