Skip to content

Commit 7e75a5e

Browse files
authored
Merge pull request kubernetes#87273 from SaranBalaji90/kubelet-log-file
Add support for disabling /logs endpoint in kubelet
2 parents aaf40ad + 05240c9 commit 7e75a5e

File tree

13 files changed

+93
-35
lines changed

13 files changed

+93
-35
lines changed

cmd/kubelet/app/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1155,7 +1155,8 @@ func startKubelet(k kubelet.Bootstrap, podCfg *config.PodConfig, kubeCfg *kubele
11551155

11561156
// start the kubelet server
11571157
if enableServer {
1158-
go k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth, enableCAdvisorJSONEndpoints, kubeCfg.EnableDebuggingHandlers, kubeCfg.EnableContentionProfiling)
1158+
go k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth,
1159+
enableCAdvisorJSONEndpoints, kubeCfg.EnableDebuggingHandlers, kubeCfg.EnableContentionProfiling, kubeCfg.EnableSystemLogHandler)
11591160

11601161
}
11611162
if kubeCfg.ReadOnlyPort > 0 {

pkg/kubelet/apis/config/fuzzer/fuzzer.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
103103
if obj.Logging.Format == "" {
104104
obj.Logging.Format = "text"
105105
}
106+
obj.EnableSystemLogHandler = true
106107
},
107108
}
108109
}

pkg/kubelet/apis/config/helpers_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ var (
166166
"EnableControllerAttachDetach",
167167
"EnableDebuggingHandlers",
168168
"EnableServer",
169+
"EnableSystemLogHandler",
169170
"EnforceNodeAllocatable[*]",
170171
"EventBurst",
171172
"EventRecordQPS",

pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/after/v1beta1.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ cpuManagerReconcilePeriod: 10s
2525
enableControllerAttachDetach: true
2626
enableDebuggingHandlers: true
2727
enableServer: true
28+
enableSystemLogHandler: true
2829
enforceNodeAllocatable:
2930
- pods
3031
eventBurst: 10

pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/roundtrip/default/v1beta1.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ cpuManagerReconcilePeriod: 10s
2525
enableControllerAttachDetach: true
2626
enableDebuggingHandlers: true
2727
enableServer: true
28+
enableSystemLogHandler: true
2829
enforceNodeAllocatable:
2930
- pods
3031
eventBurst: 10

pkg/kubelet/apis/config/types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,8 @@ type KubeletConfiguration struct {
361361
// Logging specifies the options of logging.
362362
// Refer [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) for more information.
363363
Logging componentbaseconfig.LoggingConfiguration
364+
// EnableSystemLogHandler enables /logs handler.
365+
EnableSystemLogHandler bool
364366
}
365367

366368
// KubeletAuthorizationMode denotes the authorization mode for the kubelet

pkg/kubelet/apis/config/v1beta1/defaults.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,7 @@ func SetDefaults_KubeletConfiguration(obj *kubeletconfigv1beta1.KubeletConfigura
236236
}
237237
// Use the Default LoggingConfiguration option
238238
componentbaseconfigv1alpha1.RecommendedLoggingConfiguration(&obj.Logging)
239+
if obj.EnableSystemLogHandler == nil {
240+
obj.EnableSystemLogHandler = utilpointer.BoolPtr(true)
241+
}
239242
}

pkg/kubelet/apis/config/v1beta1/zz_generated.conversion.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/kubelet/kubelet.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ type Bootstrap interface {
196196
GetConfiguration() kubeletconfiginternal.KubeletConfiguration
197197
BirthCry()
198198
StartGarbageCollection()
199-
ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling bool)
199+
ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, enableSystemLogHandler bool)
200200
ListenAndServeReadOnly(address net.IP, port uint, enableCAdvisorJSONEndpoints bool)
201201
ListenAndServePodResources()
202202
Run(<-chan kubetypes.PodUpdate)
@@ -2153,8 +2153,8 @@ func (kl *Kubelet) ResyncInterval() time.Duration {
21532153
}
21542154

21552155
// ListenAndServe runs the kubelet HTTP server.
2156-
func (kl *Kubelet) ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling bool) {
2157-
server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, address, port, tlsOptions, auth, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, kl.redirectContainerStreaming, kl.criHandler)
2156+
func (kl *Kubelet) ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, enableSystemLogHandler bool) {
2157+
server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, address, port, tlsOptions, auth, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, kl.redirectContainerStreaming, enableSystemLogHandler, kl.criHandler)
21582158
}
21592159

21602160
// ListenAndServeReadOnly runs the kubelet HTTP server in read-only mode.

pkg/kubelet/server/server.go

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,11 @@ func ListenAndServeKubeletServer(
143143
enableCAdvisorJSONEndpoints,
144144
enableDebuggingHandlers,
145145
enableContentionProfiling,
146-
redirectContainerStreaming bool,
146+
redirectContainerStreaming,
147+
enableSystemLogHandler bool,
147148
criHandler http.Handler) {
148149
klog.Infof("Starting to listen on %s:%d", address, port)
149-
handler := NewServer(host, resourceAnalyzer, auth, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, redirectContainerStreaming, criHandler)
150+
handler := NewServer(host, resourceAnalyzer, auth, enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, redirectContainerStreaming, enableSystemLogHandler, criHandler)
150151
s := &http.Server{
151152
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
152153
Handler: &handler,
@@ -168,7 +169,7 @@ func ListenAndServeKubeletServer(
168169
// ListenAndServeKubeletReadOnlyServer initializes a server to respond to HTTP network requests on the Kubelet.
169170
func ListenAndServeKubeletReadOnlyServer(host HostInterface, resourceAnalyzer stats.ResourceAnalyzer, address net.IP, port uint, enableCAdvisorJSONEndpoints bool) {
170171
klog.V(1).Infof("Starting to listen read-only on %s:%d", address, port)
171-
s := NewServer(host, resourceAnalyzer, nil, enableCAdvisorJSONEndpoints, false, false, false, nil)
172+
s := NewServer(host, resourceAnalyzer, nil, enableCAdvisorJSONEndpoints, false, false, false, false, nil)
172173

173174
server := &http.Server{
174175
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
@@ -222,7 +223,8 @@ func NewServer(
222223
enableCAdvisorJSONEndpoints,
223224
enableDebuggingHandlers,
224225
enableContentionProfiling,
225-
redirectContainerStreaming bool,
226+
redirectContainerStreaming,
227+
enableSystemLogHandler bool,
226228
criHandler http.Handler) Server {
227229
server := Server{
228230
host: host,
@@ -239,6 +241,9 @@ func NewServer(
239241
server.InstallDefaultHandlers(enableCAdvisorJSONEndpoints)
240242
if enableDebuggingHandlers {
241243
server.InstallDebuggingHandlers(criHandler)
244+
// To maintain backward compatibility serve logs only when enableDebuggingHandlers is also enabled
245+
// see https://github.com/kubernetes/kubernetes/pull/87273
246+
server.InstallSystemLogHandler(enableSystemLogHandler)
242247
if enableContentionProfiling {
243248
goruntime.SetBlockProfileRate(1)
244249
}
@@ -470,19 +475,6 @@ func (s *Server) InstallDebuggingHandlers(criHandler http.Handler) {
470475
Operation("getPortForward"))
471476
s.restfulCont.Add(ws)
472477

473-
s.addMetricsBucketMatcher("logs")
474-
ws = new(restful.WebService)
475-
ws.
476-
Path(logsPath)
477-
ws.Route(ws.GET("").
478-
To(s.getLogs).
479-
Operation("getLogs"))
480-
ws.Route(ws.GET("/{logpath:*}").
481-
To(s.getLogs).
482-
Operation("getLogs").
483-
Param(ws.PathParameter("logpath", "path to the log").DataType("string")))
484-
s.restfulCont.Add(ws)
485-
486478
s.addMetricsBucketMatcher("containerLogs")
487479
ws = new(restful.WebService)
488480
ws.
@@ -561,6 +553,28 @@ func (s *Server) InstallDebuggingDisabledHandlers() {
561553
}
562554
}
563555

556+
// InstallSystemLogHandler registers the HTTP request patterns for logs endpoint.
557+
func (s *Server) InstallSystemLogHandler(enableSystemLogHandler bool) {
558+
s.addMetricsBucketMatcher("logs")
559+
if enableSystemLogHandler {
560+
ws := new(restful.WebService)
561+
ws.Path(logsPath)
562+
ws.Route(ws.GET("").
563+
To(s.getLogs).
564+
Operation("getLogs"))
565+
ws.Route(ws.GET("/{logpath:*}").
566+
To(s.getLogs).
567+
Operation("getLogs").
568+
Param(ws.PathParameter("logpath", "path to the log").DataType("string")))
569+
s.restfulCont.Add(ws)
570+
} else {
571+
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
572+
http.Error(w, "logs endpoint is disabled.", http.StatusMethodNotAllowed)
573+
})
574+
s.restfulCont.Handle(logsPath, h)
575+
}
576+
}
577+
564578
// Checks if kubelet's sync loop that updates containers is working.
565579
func (s *Server) syncLoopHealthCheck(req *http.Request) error {
566580
duration := s.host.ResyncInterval() * 2

0 commit comments

Comments
 (0)