Port reference
Port 10250 (TCP) – Kubernetes kubelet API
HTTPS API on each Kubernetes node's kubelet for pod lifecycle, logs, exec, and metrics.
Default state
Open on every node running a kubelet. Hardened clusters require authentication; misconfigured ones allow anonymous access to exec and run commands.
Common attacks
- Anonymous access to /exec and /run for container and node RCE
- Listing pods and reading logs to harvest secrets and tokens
- Pivoting from a compromised node to the API server on 6443
- Lateral movement across workloads via service account tokens
Hardening
- Disable kubelet anonymous auth (--anonymous-auth=false)
- Enable Webhook authorization (--authorization-mode=Webhook)
- Never expose 10250 to the internet; restrict to the control plane
- Use NetworkPolicies and firewall node ports
- Rotate credentials and keep Kubernetes patched
nmap snippet
nmap -p10250 --script ssl-cert,http-title <target>Replace <target> with the host or range you're authorized to scan.
What runs on port 10250?
Port 10250 is the Kubernetes kubelet API, served over HTTPS on every node in the cluster. The control plane and the API server (6443) use it to manage pod lifecycle, stream logs, gather metrics, and exec commands inside running containers. It is one of the most powerful endpoints on a node.
Why it matters for security
The kubelet can run commands in any container on its node. A properly hardened kubelet requires authentication and authorization, but misconfigured ones allow anonymous access, turning 10250 into an unauthenticated remote code execution surface. From a single node, an attacker can read secrets and service account tokens and pivot to the entire cluster.
How it's attacked
Attackers find an anonymous 10250, list pods, and call /exec and
/run to execute commands inside containers and on the node itself. They
read logs to harvest secrets and service account tokens, then pivot to
the API server on 6443 and move laterally across workloads and connected cloud
accounts.
Hardening checklist
Disable anonymous auth (--anonymous-auth=false) and enable Webhook
authorization (--authorization-mode=Webhook). Never expose 10250 to the
internet — restrict it to the control plane with NetworkPolicies and
host firewalls. Rotate credentials, apply least-privilege service accounts,
and keep Kubernetes patched. Use the nmap snippet to check exposure on
clusters you are authorized to test.
</content>
Related ports
Frequently asked questions
- What is port 10250 used for?
- It is the Kubernetes kubelet API, served over HTTPS on every node. The control plane uses it to manage pods, stream logs, and exec into containers. It is one of the most sensitive endpoints on a node.
- Why is an exposed kubelet on 10250 dangerous?
- If anonymous auth is enabled, anyone reaching 10250 can call /exec and /run to execute commands in containers and on the node, then pivot to the API server on 6443. Disable anonymous auth, enforce Webhook authorization, and keep 10250 private.