Skip to content

Commit 713f7fa

Browse files
committed
serve 503 when auth filter setup fails instead of panicking
1 parent cc63efd commit 713f7fa

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

pkg/app/server.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -567,26 +567,27 @@ func buildMetricsServer(m *metricshandler.MetricsHandler, durationObserver prome
567567
mux := http.NewServeMux()
568568

569569
// Add metricsPath
570-
metricsHandler := promhttp.InstrumentHandlerDuration(durationObserver, m)
570+
var metricsHandler http.Handler = promhttp.InstrumentHandlerDuration(durationObserver, m)
571571

572572
// Add Authentication/Authorization via Kubernetes API
573573
if authFilter {
574+
unavailable := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
575+
http.Error(w, "auth filter unavailable", http.StatusServiceUnavailable)
576+
})
577+
574578
client, err := rest.HTTPClientFor(kubeConfig)
575579
if err != nil {
576580
klog.ErrorS(err, "failed to create HTTP client from config")
577-
}
578-
579-
metricsFilter, err := filters.WithAuthenticationAndAuthorization(kubeConfig, client)
580-
if err != nil {
581+
metricsHandler = unavailable
582+
} else if metricsFilter, err := filters.WithAuthenticationAndAuthorization(kubeConfig, client); err != nil {
581583
klog.ErrorS(err, "failed to create auth handler")
582-
}
583-
584-
handler, err := metricsFilter(klog.Background(), metricsHandler)
585-
if err != nil {
584+
metricsHandler = unavailable
585+
} else if handler, err := metricsFilter(klog.Background(), metricsHandler); err != nil {
586586
klog.ErrorS(err, "failed to apply metrics filter")
587+
metricsHandler = unavailable
588+
} else {
589+
metricsHandler = handler
587590
}
588-
metricsHandler = handler.(http.HandlerFunc)
589-
590591
}
591592

592593
mux.Handle(metricsPath, metricsHandler)

0 commit comments

Comments
 (0)