From 5d00096f828427afbfc2f283c7c5cb099ab3f7fa Mon Sep 17 00:00:00 2001 From: "Gina A." <70909035+gndz07@users.noreply.github.com> Date: Wed, 7 Jan 2026 09:38:05 +0100 Subject: [PATCH] Fix panic for empty defaultBackend and defaultBackend without resources --- ...ress-with-defaultbackend-with-resource.yml | 12 +++++++++++ .../Ingress-with-empty-defaultbackend.yml | 8 ++++++++ pkg/provider/kubernetes/ingress/kubernetes.go | 11 ++++++++++ .../kubernetes/ingress/kubernetes_test.go | 20 +++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 pkg/provider/kubernetes/ingress/fixtures/Ingress-with-defaultbackend-with-resource.yml create mode 100644 pkg/provider/kubernetes/ingress/fixtures/Ingress-with-empty-defaultbackend.yml diff --git a/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-defaultbackend-with-resource.yml b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-defaultbackend-with-resource.yml new file mode 100644 index 000000000..2d21ccab4 --- /dev/null +++ b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-defaultbackend-with-resource.yml @@ -0,0 +1,12 @@ +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: defaultbackend + namespace: testing + +spec: + defaultBackend: + resource: + apiGroup: example.com + kind: SomeBackend + name: foo diff --git a/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-empty-defaultbackend.yml b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-empty-defaultbackend.yml new file mode 100644 index 000000000..9eff4acd5 --- /dev/null +++ b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-empty-defaultbackend.yml @@ -0,0 +1,8 @@ +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: defaultbackend + namespace: testing + +spec: + defaultBackend: {} diff --git a/pkg/provider/kubernetes/ingress/kubernetes.go b/pkg/provider/kubernetes/ingress/kubernetes.go index 775ff2a7d..fa0afe5d5 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes.go +++ b/pkg/provider/kubernetes/ingress/kubernetes.go @@ -269,6 +269,17 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl continue } + if ingress.Spec.DefaultBackend.Resource != nil { + // https://kubernetes.io/docs/concepts/services-networking/ingress/#resource-backend + logger.Error().Msg("Resource is not supported for default backend") + continue + } + + if ingress.Spec.DefaultBackend.Service == nil { + logger.Error().Msg("Default backend is missing service definition") + continue + } + service, err := p.loadService(client, ingress.Namespace, *ingress.Spec.DefaultBackend) if err != nil { logger.Error(). diff --git a/pkg/provider/kubernetes/ingress/kubernetes_test.go b/pkg/provider/kubernetes/ingress/kubernetes_test.go index 0b95bf173..c67e84e57 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes_test.go +++ b/pkg/provider/kubernetes/ingress/kubernetes_test.go @@ -550,6 +550,26 @@ func TestLoadConfigurationFromIngresses(t *testing.T) { }, }, }, + { + desc: "Ingress with defaultbackend with resource", + expected: &dynamic.Configuration{ + HTTP: &dynamic.HTTPConfiguration{ + Middlewares: map[string]*dynamic.Middleware{}, + Routers: map[string]*dynamic.Router{}, + Services: map[string]*dynamic.Service{}, + }, + }, + }, + { + desc: "Ingress with empty defaultbackend", + expected: &dynamic.Configuration{ + HTTP: &dynamic.HTTPConfiguration{ + Middlewares: map[string]*dynamic.Middleware{}, + Routers: map[string]*dynamic.Router{}, + Services: map[string]*dynamic.Service{}, + }, + }, + }, { desc: "Ingress with one service without endpoint", expected: &dynamic.Configuration{