Commit Graph

232 Commits

Author SHA1 Message Date
Brian Sonnenberg
8c848ad9e4 Moved broadcast logic into StatusManager with no lock-holding. 2026-03-18 23:07:37 +00:00
Brian Sonnenberg
044f65ca5c [KEP-4188] New Kubelet gRPC API with endpoint returning local Pod information 2026-03-18 23:07:36 +00:00
Kubernetes Prow Robot
ad4e232c4a Merge pull request #137326 from amritansh1502/fix-136333-kubelet-zero-psi-metrics
Fix zero PSI metrics emitted when OS doesn't enable PSI
2026-03-18 08:23:39 +05:30
Kubernetes Prow Robot
b869833664 Merge pull request #137115 from damdo/add-tls-curve-preferences
Add --tls-curve-preferences flag for configuring TLS key exchange mechanism (curves)
2026-03-13 23:11:35 +05:30
Damiano Donati
53b163298d Add --tls-curve-preferences flag for configuring TLS key exchange mechanisms
Introduce support for specifying allowed TLS key exchange mechanisms
(IANA TLS Supported Groups) via a new --tls-curve-preferences flag,
following the same pattern as --tls-cipher-suites.

Curve preferences are specified as numeric IANA TLS Supported Group IDs
(e.g. 23,29,4588) rather than string names. This avoids maintaining a
hardcoded name-to-ID map that would become stale with each Go release,
and ensures new curves (such as Go 1.26's SecP256r1MLKEM768 and
SecP384r1MLKEM1024) work automatically when rebuilding with a newer Go
version -- no code changes required.

Changes:
- Add curves_flag.go in component-base/cli/flag with a simple
  int-to-tls.CurveID cast function
- Add CurvePreferences field ([]int32) to SecureServingOptions, registered
  via IntSliceVar, and wire it through to tls.Config

The order of the list is ignored; Go selects from the set using an
internal preference order. If omitted, Go defaults are used. The set of
accepted values depends on the Go version used to build the binary; see
https://pkg.go.dev/crypto/tls#CurveID for reference.
2026-03-13 14:26:05 +01:00
Amritansh Amritansh
fbb68965f2 Fix zero PSI metrics emitted when OS doesn't enable PSI
Made-with: Cursor
2026-03-13 00:24:11 +05:30
Davanum Srinivas
1ee1ff97fb staging: extract CRI streaming modules with client-go compatibility
Extract streaming code into dedicated staging modules while keeping stable
compatibility APIs for external client-go consumers.

This commit:
- adds `k8s.io/cri-streaming` for CRI exec/attach/portforward server code
- adds `k8s.io/streaming` as the canonical home for shared transport
  primitives (`httpstream`, `spdy`, `wsstream`, runtime helpers)
- switches in-tree transport consumers to `k8s.io/streaming`
- removes in-tree kubelet CRI streaming package
- preserves NO_PROXY/no_proxy CIDR handling in extracted SPDY proxier logic
- adds deprecated `k8s.io/apimachinery/pkg/util/httpstream` compatibility
  wrappers (`httpstream`, `spdy`, `wsstream`) backed by `k8s.io/streaming`
- restores exported client-go SPDY/portforward API signatures to
  apimachinery `httpstream` types for downstream compatibility
- adds streaming-native client-go adapters/constructors so in-tree callers
  can use `k8s.io/streaming` without changing external compatibility APIs
- deduplicates SPDY-over-websocket dial negotiation shared by compat and
  streaming tunneling dialers
- logs dropped unknown stream types in `RemoveStreams` adapter fallbacks to
  improve compatibility-path debuggability
- adds integration coverage for the streaming-upgrader-to-client-go-compat
  adapter path against a real cri-streaming exec endpoint
- clarifies kubectl streaming import aliasing to avoid `httpstream` package
  ambiguity
- updates tests, import restrictions, publishing metadata, and vendor/module
  metadata for the new staging modules

Signed-off-by: Davanum Srinivas <davanum@gmail.com>
2026-03-12 09:59:55 -04:00
Sean Sullivan
392b5e5c82 Updated proxy handler in kubelet 2026-03-11 16:31:13 +00:00
Kubernetes Prow Robot
68f0b37edc Merge pull request #137420 from richabanker/statusz-installation
Fix registration for statusz and flagz in apiserver, kubelet
2026-03-06 10:58:17 +05:30
Richa Banker
426bb7cded Fix auth registration for statusz and flagz
Co-authored-by: Jordan Liggitt <jordan@liggitt.net>
2026-03-05 16:31:27 -08:00
Harshal Neelkamal
40d8705d28 Introduce a kubelet-server configuration that allows reloading ClientCA in TLSConfig 2026-03-05 02:04:08 +00:00
Damien Grisonnet
22706b7bdf pkg/kubelet: add kubelet_metrics_provider metric
This metric is meant to help end-users identify which metrics provider
kubelet is using under the hood to expose container stats.

Signed-off-by: Damien Grisonnet <dgrisonn@redhat.com>
2026-02-12 19:28:52 +01:00
Damien Grisonnet
cb79675508 Fix defer duration metric recording bug
Defer statements were incorrectly recording near-zero duration values (~2
microseconds) instead of actual elapsed time because arguments to deferred
functions are evaluated immediately when the defer statement is executed.

Solution: Added HistogramVec.ObserveSince() API that properly handles
deferred duration measurement, and replaced all problematic patterns.

The new API pattern:
  defer metric.ObserveSince(time.Now(), labels)()

Also deprecated SinceInSeconds() with warnings about incorrect defer usage.

Fixes: Incorrect HTTP request duration metrics in kubelet
2026-02-06 00:29:15 +08:00
Kai Wohlfahrt
2ba1b66b57 Fix kubelet certificate reload when connecting by IP
Currently, we set TLSConfig.Config.GetCertificate, but then also pass
certificate and key paths to http.Server.ListenAndServeTLS.

ListenAndServeTLS uses these paths to populate the TLS config Certificate
property. Then, when accepting connections, a non-nil Certificate is preferred
over GetCertificate if the ServerName is not set in ClientHelloInfo. Finally,
the Go TLS client doesn't set ServerName when connecting by IP. As a result,
when connecting to the kubelet by IP (e.g. to fetch pod logs), stale
certificates are served.

This patch passes empty certFile and keyFile arguments, to force the TLS
server to use the GetCertificate function.

This is done by clearing key/cert file config when setting GetCertificate as
suggested in PR review. This way, all downstream users of kubeDeps.TLSConfig
will do the right thing automatically.
2025-11-25 20:44:19 +01:00
yongruilin
2422bc0bb8 feat: Implement structured /flagz endpoint 2025-11-04 19:45:30 +00:00
Richa Banker
c1a95eb7e2 Structured statusz 2025-10-30 10:39:52 -07:00
Ed Bartosh
b276c96ef8 Migrate kubelet/server to contextual logging 2025-09-09 12:49:42 +03:00
Nikola
137d56c1c2 add paths section to kubelet statusz endpoint
Signed-off-by: Nikola <peac36@abv.bg>
2025-09-01 16:38:03 +03:00
Ed Bartosh
7dad9e2af6 migrate pkg/kubelet/apis to contextual logging 2025-07-17 10:15:58 +03:00
David Ashpole
5a20c38da6 remove usage of KubeletTracing featuregate from kubelet 2025-06-30 12:30:47 +00:00
Tim Allclair
125600e745 Remove unused GetHostname method 2025-05-14 11:05:46 -07:00
Haowei Cai
92a42e65ec Surface cadvisor PSI metrics to summary API and prometheus metrics 2025-03-21 07:42:51 +00:00
zhangzhifei16
2db729cfa4 Add flatz to kubelet auth.
Fix: Move flagz to InstallDebuggingHandlers.

Move flagz  to the lower switch statemen

Fix linter

Drop the function parameter for the read-only server.
2025-03-13 10:11:59 +08:00
Tim Allclair
97cb563cae Require auth for all new Kubelet endpoints 2025-02-19 12:17:05 -08:00
Siyuan Zhang
8fc3a33454 Refactor compatibility version code
Replace DefaultComponentGlobalsRegistry with new instance of componentGlobalsRegistry in test api server.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

move kube effective version validation out of component base.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

move DefaultComponentGlobalsRegistry out of component base.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

move ComponentGlobalsRegistry out of featuregate pkg.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

remove usage of DefaultComponentGlobalsRegistry in test files.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

change non-test DefaultKubeEffectiveVersion to use DefaultBuildEffectiveVersion.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

Restore useDefaultBuildBinaryVersion in effective version.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

rename DefaultKubeEffectiveVersion to DefaultKubeEffectiveVersionForTest.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

pass options.ComponentGlobalsRegistry into config for controller manager and scheduler.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

Pass apiserver effective version to DefaultResourceEncodingConfig.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

change statusz registry to take effective version from the components.

Signed-off-by: Siyuan Zhang <sizhang@google.com>

Address review comments

Signed-off-by: Siyuan Zhang <sizhang@google.com>

update vendor

Signed-off-by: Siyuan Zhang <sizhang@google.com>
2025-02-05 16:10:53 -08:00
Tim Allclair
bda81f1b68 Kubelet server handler cleanup 2025-01-21 16:31:52 -08:00
zhifei92
902dedbb52 fix: Move statusz to debugging handlers. 2024-12-10 10:40:14 +08:00
zhifei92
816cd40280 Unify ComponentKubelet and add unit tests. 2024-12-10 10:32:14 +08:00
zhifei92
a04df83f86 add statusz for kubelet 2024-12-10 10:32:14 +08:00
Jian Zeng
94cd0a0892 feat(kubelet): only returns logs that match the given stream
Signed-off-by: Jian Zeng <anonymousknight96@gmail.com>
2024-11-07 13:52:16 +08:00
zhangzhifei16
1381e41f28 feat: Integrate device plugin registration gRPC server health checks. 2024-11-05 19:59:56 +08:00
zhifei92
dac7332ed2 integrate kubelet with the systemd watchdog
feat:  add unit test

feat:  add FeatureGate for SystemdWatchdog

fix:  linter and failed tests

feat:  add SystemdWatchdog to versioned feature list yaml
2024-10-21 10:46:14 +08:00
Vinayak Goyal
b1f290d444 KEP-2862: Fine-grained Kubelet API Authorization
Signed-off-by: Vinayak Goyal <vinaygo@google.com>
2024-10-17 20:53:27 +00:00
Kubernetes Prow Robot
a8d51f4f05 Use a generic Set instead of a specified Set in kubelet
Signed-off-by: bzsuni <bingzhe.sun@daocloud.io>
2024-06-04 14:25:43 +08:00
Sascha Grunert
2aa9e76be1 Move pkg/kubelet/cri/remote to cri-client
Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2024-05-14 10:58:18 +02:00
Kubernetes Prow Robot
3fda574e5e Merge pull request #121770 from frzifus/tracing_kubelet_read-only
pass tracerprovider to kublet-readonly server
2024-04-17 23:59:33 -07:00
Adrian Reber
da8ffcd1dc Switch 'ContainerCheckpoint' from Alpha to Beta
* Forensic Container Checkpointing as described in KEP 2008 moves from
   Alpha to Beta. This is corresponding code change.

 * Adapt e2e test to handle
   '(rpc error: code = Unimplemented desc = unknown method CheckpointContainer'
   and
   '(rpc error: code = Unimplemented desc = method CheckpointContainer not implemented)'
   and
   '(rpc error: code = Unknown desc = checkpoint/restore support not available)'
   One error message is if the CRI implementation does
   not implement the CRI RPC (too old) and the second is
   if the CRI implementation does explicitly not support the feature.
   The third error message can be seen if the container engine
   explicitly disabled the checkpoint/restore support,

 * As described in the corresponding KEP 2008 explicitly test for
   disabled functionality.

 * Extended test to look for the checkpoint kubelet metric.

 * Extended test to look for the CRI error metric.

 *  Add separate sub-resource permission to control permissions on
    the checkpoint kubelet API endpoint

Signed-off-by: Adrian Reber <areber@redhat.com>
2024-02-19 18:09:38 +00:00
yanggang
98054dd9d3 Clean unused code in kubelet server.
Signed-off-by: yanggang <gang.yang@daocloud.io>
2024-01-17 01:01:39 +00:00
Benedikt Bongartz
c823a21a7a apply public endpoint filter only for kubelet-readonly
Signed-off-by: Benedikt Bongartz <bongartz@klimlive.de>
2024-01-11 00:43:41 +01:00
Benedikt Bongartz
099eba784b pass tracerprovider to kublet-readonly server
Signed-off-by: Benedikt Bongartz <bongartz@klimlive.de>
2023-11-07 06:15:45 +01:00
Katarzyna Lach
122ff5a212 Move grpc rate limitter from podresource folder
Rate limitter.go file is a generic file implementing
grpc Limiter interface. This file can be reuse by other gRPC
API not only by podresource.

Change-Id: I905a46b5b605fbb175eb9ad6c15019ffdc7f2563
2023-10-09 07:22:23 +00:00
Han Kang
e6435e98ed promote component SLIs to GA; remove feature gates for component slis 2023-09-11 09:15:32 -07:00
Sascha Grunert
a6554b9d5d Make kubelet label types public
We use the label definitions in CRI-O, means we now make them public to
stop vendoring/copying this part of Kubernetes.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2023-07-10 10:58:44 +02:00
Sascha Grunert
db9fcfeed2 Move cri/streaming to k8s.io/kubelet staging repository
Container runtimes like CRI-O and containerd reuse the code by copying
it from Kubernetes. To have a single source of truth for the streaming
server we now move the already isolated implementation to the
k8s.io/kubelet staging repository. This way runtimes can re-use the code
without copying the parts.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2023-06-05 08:08:18 +02:00
Francesco Romani
6b4ffdb9f7 node: re-implement Localendpoint on windows
this will allows us to move forward with the podresources
endpoint GA graduation.

xref: https://github.com/kubernetes/kubernetes/issues/78628

Signed-off-by: Francesco Romani <fromani@redhat.com>
2023-03-14 22:39:56 +01:00
Francesco Romani
195fc2f516 kubelet: podresources: rename variable
on unix, the podresources endpoint is a unix domain socket;
on windows, the podresources endpoint is a named pipe;
rename the variables to convey this fact. No changes in behavior.

Signed-off-by: Francesco Romani <fromani@redhat.com>
2023-03-14 22:39:54 +01:00
Kubernetes Prow Robot
28fa3cbbf1 Merge pull request #115847 from moshe010/pod-resource-api-dra-upstream
Extend the PodResources API to include resources allocated by DRA
2023-03-14 14:12:26 -07:00
Francesco Romani
5e03998991 kubelet: podresources: pack parameters in a struct
To enable rate limiting, needed for GA graduation,
we need to pass more parameters to the already crowded
`ListenAndServePodresources` function.

To tidy up a bit, pack the parameters in a helper struct,
with no intended changes in behavior.

Signed-off-by: Francesco Romani <fromani@redhat.com>
2023-03-14 19:33:01 +02:00
Aravindh Puthiyaparambil
d12696c20f kubelet: Expose simple journald and Get-WinEvent shims on the logs endpoint
Provide an administrator a streaming view of journal logs on Linux
systems using journalctl, and event logs on Windows systems using the
Get-WinEvent PowerShell cmdlet without them having to implement a client
side reader.

Only available to cluster admins.

The implementation for journald on Linux was originally done by Clayton
Coleman.

Introduce a heuristics approach to query logs

The logs query for node objects will follow a heuristics approach
when asked to query for logs from a service. If asked to get the
logs from a service foobar, it will first check if foobar logs to the
native OS service log provider. If unable to get logs from these, it
will attempt to get logs from /var/foobar, /var/log/foobar.log or
/var/log/foobar/foobar.log in that order.
The logs sub-command can also directly serve a file if the query looks
like a file.

Co-authored-by: Clayton Coleman <ccoleman@redhat.com>
Co-authored-by: Christian Glombek <cglombek@redhat.com>
2023-03-14 08:54:36 -07:00
Francesco Romani
b837a0c1ff kubelet: podresources: DOS prevention with builtin ratelimit
Implement DOS prevention wiring a global rate limit for podresources
API. The goal here is not to introduce a general ratelimiting solution
for the kubelet (we need more research and discussion to get there),
but rather to prevent misuse of the API.

Known limitations:
- the rate limits value (QPS, BurstTokens) are hardcoded to
  "high enough" values.
  Enabling user-configuration would require more discussion
  and sweeping changes to the other kubelet endpoints, so it
  is postponed for now.
- the rate limiting is global. Malicious clients can starve other
  clients consuming the QPS quota.

Add e2e test to exercise the flow, because the wiring itself
is mostly boilerplate and API adaptation.
2023-03-11 08:00:54 +01:00