From ef2d03d96ea6681ae260090a398c83db2d02c2ff Mon Sep 17 00:00:00 2001 From: Romain Bailly <59010447+rbailly-talend@users.noreply.github.com> Date: Fri, 26 Nov 2021 12:10:11 +0100 Subject: [PATCH] fix: propagate source criterion config to RateLimit middleware in Kubernetes CRD --- .../crd/fixtures/with_middleware.yml | 19 +++++++++++++++++++ pkg/provider/kubernetes/crd/kubernetes.go | 4 ++++ .../kubernetes/crd/kubernetes_test.go | 14 +++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/pkg/provider/kubernetes/crd/fixtures/with_middleware.yml b/pkg/provider/kubernetes/crd/fixtures/with_middleware.yml index 3a7cd97eb..45b2dcd49 100644 --- a/pkg/provider/kubernetes/crd/fixtures/with_middleware.yml +++ b/pkg/provider/kubernetes/crd/fixtures/with_middleware.yml @@ -9,6 +9,24 @@ spec: prefixes: - /tobestripped +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: ratelimit + namespace: default + +spec: + rateLimit: + period: 1m + average: 6 + burst: 12 + sourceCriterion: + ipStrategy: + excludedIPs: + - 127.0.0.1/32 + - 192.168.1.7 + --- apiVersion: traefik.containo.us/v1alpha1 kind: Middleware @@ -40,5 +58,6 @@ spec: port: 80 middlewares: - name: stripprefix + - name: ratelimit - name: addprefix namespace: foo diff --git a/pkg/provider/kubernetes/crd/kubernetes.go b/pkg/provider/kubernetes/crd/kubernetes.go index 37c56952e..a03d749eb 100644 --- a/pkg/provider/kubernetes/crd/kubernetes.go +++ b/pkg/provider/kubernetes/crd/kubernetes.go @@ -426,6 +426,10 @@ func createRateLimitMiddleware(rateLimit *v1alpha1.RateLimit) (*dynamic.RateLimi } } + if rateLimit.SourceCriterion != nil { + rl.SourceCriterion = rateLimit.SourceCriterion + } + return rl, nil } diff --git a/pkg/provider/kubernetes/crd/kubernetes_test.go b/pkg/provider/kubernetes/crd/kubernetes_test.go index a84e2f540..14e716acf 100644 --- a/pkg/provider/kubernetes/crd/kubernetes_test.go +++ b/pkg/provider/kubernetes/crd/kubernetes_test.go @@ -1470,10 +1470,22 @@ func TestLoadIngressRoutes(t *testing.T) { Service: "default-test2-route-23c7f4c450289ee29016", Rule: "Host(`foo.com`) && PathPrefix(`/tobestripped`)", Priority: 12, - Middlewares: []string{"default-stripprefix", "foo-addprefix"}, + Middlewares: []string{"default-stripprefix", "default-ratelimit", "foo-addprefix"}, }, }, Middlewares: map[string]*dynamic.Middleware{ + "default-ratelimit": { + RateLimit: &dynamic.RateLimit{ + Average: 6, + Burst: 12, + Period: ptypes.Duration(60 * time.Second), + SourceCriterion: &dynamic.SourceCriterion{ + IPStrategy: &dynamic.IPStrategy{ + ExcludedIPs: []string{"127.0.0.1/32", "192.168.1.7"}, + }, + }, + }, + }, "default-stripprefix": { StripPrefix: &dynamic.StripPrefix{ Prefixes: []string{"/tobestripped"},