Kong / kubernetes-ingress-controller

:gorilla: Kong for Kubernetes: The official Ingress Controller for Kubernetes.
https://docs.konghq.com/kubernetes-ingress-controller/
Apache License 2.0
2.22k stars 592 forks source link

Panic in `DefaultCacheGraphProvider.CacheToGraph` running with `FallbackConfiguration=true` #6775

Open pmalek opened 9 hours ago

pmalek commented 9 hours ago

Problem statement

Recently, running KIC locally I stumbled across this panic when running with FallbackConfiguration=true feature flag:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x102645e44]

goroutine 650 [running]:
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane/fallback.DefaultCacheGraphProvider.CacheToGraph({}, {{0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, ...}, ...})
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/fallback/cache_to_graph.go:27 +0xb4
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane/fallback.(*Generator).GenerateExcludingBrokenObjects(_, {{0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, ...}, ...}, ...)
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/fallback/fallback.go:37 +0xd8
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*KongClient).generateFallbackCache(_, {{0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, ...}, ...}, ...)
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/kong_client.go:658 +0x4f8
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*KongClient).tryRecoveringWithFallbackConfiguration(_, {_, _}, {{0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, ...}, ...}, ...)
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/kong_client.go:602 +0xc0
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*KongClient).maybeTryRecoveringFromGatewaysSyncError(_, {_, _}, {{0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, ...}, ...}, ...)
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/kong_client.go:572 +0x174
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*KongClient).Update(0x140001e2400, {0x102fd67f0, 0x14001004d20})
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/kong_client.go:503 +0xcfc
github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*Synchronizer).startUpdateServer(0x1400016f7a0, {0x102fd67f0, 0x14001004d20})
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/synchronizer.go:183 +0xfc
created by github.com/kong/kubernetes-ingress-controller/v3/internal/dataplane.(*Synchronizer).Start in goroutine 201
    /Users/patryk.malek@konghq.com/code_/kubernetes-ingress-controller/internal/dataplane/synchronizer.go:120 +0x394

Acceptance criteria

pmalek commented 9 hours ago

Putting this tentatively in 3.4. If unfeasible, let's punt to 3.5.