Skip to content

Commit 7c9ddcb

Browse files
committed
add paths section to kubelet statusz endpoint
Signed-off-by: Nikola <peac36@abv.bg>
1 parent 7cc3faf commit 7c9ddcb

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

pkg/kubelet/server/server.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,9 @@ func NewServer(
317317
} else {
318318
server.InstallDebuggingDisabledHandlers()
319319
}
320+
321+
server.InstallStatusZ()
322+
320323
return server
321324
}
322325

@@ -379,6 +382,13 @@ func (s *Server) InstallTracingFilter(tp oteltrace.TracerProvider, opts ...otelr
379382
s.restfulCont.Filter(otelrestful.OTelFilter("kubelet", append(opts, otelrestful.WithTracerProvider(tp))...))
380383
}
381384

385+
func (s *Server) InstallStatusZ() {
386+
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentStatusz) {
387+
s.addMetricsBucketMatcher("statusz")
388+
statusz.Install(s.restfulCont, ComponentKubelet, statusz.NewRegistry(compatibility.DefaultBuildEffectiveVersion(), statusz.WithListedPaths(s.restfulCont.RegisteredHandlePaths())))
389+
}
390+
}
391+
382392
// addMetricsBucketMatcher adds a regexp matcher and the relevant bucket to use when
383393
// it matches. Please be aware this is not thread safe and should not be used dynamically
384394
func (s *Server) addMetricsBucketMatcher(bucket string) {
@@ -574,11 +584,6 @@ func (s *Server) InstallAuthRequiredHandlers() {
574584
s.addMetricsBucketMatcher("configz")
575585
configz.InstallHandler(s.restfulCont)
576586

577-
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentStatusz) {
578-
s.addMetricsBucketMatcher("statusz")
579-
statusz.Install(s.restfulCont, ComponentKubelet, statusz.NewRegistry(compatibility.DefaultBuildEffectiveVersion()))
580-
}
581-
582587
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentFlagz) {
583588
if s.flagz != nil {
584589
s.addMetricsBucketMatcher("flagz")

pkg/kubelet/server/server_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,36 @@ func assertHealthFails(t *testing.T, httpURL string, expectedErrorCode int) {
514514
}
515515
}
516516

517+
func TestStatusz(t *testing.T) {
518+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, zpagesfeatures.ComponentStatusz, true)
519+
520+
fw := newServerTest()
521+
defer fw.testHTTPServer.Close()
522+
523+
req, err := http.NewRequest("GET", fw.testHTTPServer.URL+"/statusz", nil)
524+
if err != nil {
525+
t.Fatalf("Got error creating request: %v", err)
526+
}
527+
req.Header.Set("Accept", "text/plain")
528+
resp, err := http.DefaultClient.Do(req)
529+
if err != nil {
530+
t.Fatalf("Got error GETing: %v", err)
531+
}
532+
defer resp.Body.Close()
533+
if resp.StatusCode != http.StatusOK {
534+
t.Errorf("expected status code %d, got %d", http.StatusOK, resp.StatusCode)
535+
}
536+
resBody, err := io.ReadAll(resp.Body)
537+
if err != nil {
538+
t.Fatalf("Got error reading response body: %v", err)
539+
}
540+
541+
resBodyString := string(resBody)
542+
if !strings.Contains(resBodyString, "Paths") || !strings.Contains(resBodyString, "/configz /debug /healthz /metrics") {
543+
t.Errorf("statusz paths missing: %s\n\nExpected: %q", resBodyString, "Paths<delimter> /configz /debug /healthz /metrics")
544+
}
545+
}
546+
517547
// Ensure all registered handlers & services have an associated testcase.
518548
func TestAuthzCoverage(t *testing.T) {
519549
fw := newServerTest()

0 commit comments

Comments
 (0)