From c02b72ca51e6dc8e0a92868cb168159b3343589b Mon Sep 17 00:00:00 2001 From: Jesper Noordsij <45041769+jnoordsij@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:24:04 +0200 Subject: [PATCH] Disable IngressClass lookup when disableClusterScopeResources is enabled --- pkg/provider/kubernetes/ingress/kubernetes.go | 2 +- .../kubernetes/ingress/kubernetes_test.go | 63 ++++++++++++++++--- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/pkg/provider/kubernetes/ingress/kubernetes.go b/pkg/provider/kubernetes/ingress/kubernetes.go index 982cc09e8..c6b38e5ea 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes.go +++ b/pkg/provider/kubernetes/ingress/kubernetes.go @@ -219,7 +219,7 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl var ingressClasses []*netv1.IngressClass - if !p.DisableIngressClassLookup { + if !p.DisableIngressClassLookup && !p.DisableClusterScopeResources { ics, err := client.GetIngressClasses() if err != nil { log.Ctx(ctx).Warn().Err(err).Msg("Failed to list ingress classes") diff --git a/pkg/provider/kubernetes/ingress/kubernetes_test.go b/pkg/provider/kubernetes/ingress/kubernetes_test.go index 9b736a454..2af574c35 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes_test.go +++ b/pkg/provider/kubernetes/ingress/kubernetes_test.go @@ -26,11 +26,12 @@ func Bool(v bool) *bool { return &v } func TestLoadConfigurationFromIngresses(t *testing.T) { testCases := []struct { - desc string - ingressClass string - expected *dynamic.Configuration - allowEmptyServices bool - disableIngressClassLookup bool + desc string + ingressClass string + expected *dynamic.Configuration + allowEmptyServices bool + disableIngressClassLookup bool + disableClusterScopeResources bool }{ { desc: "Empty ingresses", @@ -1335,6 +1336,38 @@ func TestLoadConfigurationFromIngresses(t *testing.T) { }, }, }, + { + // Duplicate test case with the same fixture as the one above, but with the disableClusterScopeResources option to true. + // Showing that disabling the ingressClass discovery still allow the discovery of ingresses with ingress annotation. + desc: "Ingress with ingress annotation", + disableClusterScopeResources: true, + expected: &dynamic.Configuration{ + HTTP: &dynamic.HTTPConfiguration{ + Middlewares: map[string]*dynamic.Middleware{}, + Routers: map[string]*dynamic.Router{ + "testing-bar": { + Rule: "PathPrefix(`/bar`)", + Service: "testing-service1-80", + }, + }, + Services: map[string]*dynamic.Service{ + "testing-service1-80": { + LoadBalancer: &dynamic.ServersLoadBalancer{ + PassHostHeader: Bool(true), + ResponseForwarding: &dynamic.ResponseForwarding{ + FlushInterval: ptypes.Duration(100 * time.Millisecond), + }, + Servers: []dynamic.Server{ + { + URL: "http://10.10.0.1:8080", + }, + }, + }, + }, + }, + }, + }, + }, { desc: "Ingress with ingressClass", expected: &dynamic.Configuration{ @@ -1377,6 +1410,19 @@ func TestLoadConfigurationFromIngresses(t *testing.T) { }, }, }, + { + // Duplicate test case with the same fixture as the one above, but with the disableClusterScopeResources option to true. + // Showing that disabling the ingressClass discovery avoid discovering Ingresses with an IngressClass. + desc: "Ingress with ingressClass", + disableClusterScopeResources: true, + expected: &dynamic.Configuration{ + HTTP: &dynamic.HTTPConfiguration{ + Middlewares: map[string]*dynamic.Middleware{}, + Routers: map[string]*dynamic.Router{}, + Services: map[string]*dynamic.Service{}, + }, + }, + }, { desc: "Ingress with named port", expected: &dynamic.Configuration{ @@ -1455,9 +1501,10 @@ func TestLoadConfigurationFromIngresses(t *testing.T) { clientMock := newClientMock(generateTestFilename(test.desc)) p := Provider{ - IngressClass: test.ingressClass, - AllowEmptyServices: test.allowEmptyServices, - DisableIngressClassLookup: test.disableIngressClassLookup, + IngressClass: test.ingressClass, + AllowEmptyServices: test.allowEmptyServices, + DisableIngressClassLookup: test.disableIngressClassLookup, + DisableClusterScopeResources: test.disableClusterScopeResources, } conf := p.loadConfigurationFromIngresses(context.Background(), clientMock)