kubelet API 与 10250 端口
10250 是 Kubernetes 每个节点上 kubelet API 的默认端口,使用 HTTPS。日常的日志查看与容器内执行命令,最终都通过这条通道下发。它默认禁用匿名访问,但历史上出现过认证与授权绕过的问题,且通过放宽的权限绑定(例如节点的代理相关权限)可以绕过审计执行命令,因此审计集群时应专门盯住这个端口与相关权限。
基本信息
| 服务 | kubelet API |
|---|---|
| 端口/协议 | TCP HTTPS 10250,只读端口 10255 已逐步移除 |
| 能力范围 | 查看日志、在容器内执行命令、读取节点信息 |
| 暴露要求 | 仅控制面可达,禁止公网 |
| 权限要点 | 节点的代理相关权限决定能否绕过审计 |
| 安全等级 | 严禁公网暴露,严格控制来源 |
典型使用场景
- 集群运维:经 API 中转到节点做日志与命令操作
- 监控采集:节点层面的指标与容器状态采集
- 安全审计:核对匿名访问与权限绑定是否过宽
- 故障排查:确认节点到控制面的通道是否正常
- 基线核查:确认已废弃的只读端口是否关闭
权限审计
权限审计
curl -sk https://node01:10250/pods | head -c 200 # 未授权访问应被拒绝
kubectl auth can-i create pods --as system:anonymous # 匿名权限应为否
kubectl get clusterrolebinding -o wide | grep -i proxy # 检查代理相关绑定
sudo ss -lntp | grep -E ':(10250|10255) ' # 节点侧监听核对返回与含义
| 返回 | 含义 | 处置 |
|---|---|---|
| 401 或 403 | 未认证或未授权 | 属预期结果 |
| 直接返回数据 | 认证配置存在问题 | 立即核查匿名访问设置 |
| 命令执行成功 | 调用方权限过宽 | 收紧相关权限绑定 |
| 节点状态异常 | 与控制面通道异常 | 检查证书与网络 |
运维要点
- 云上安全组显式禁止从公网访问 10250
- 定期审计能访问节点代理能力的角色与账号
- 集群证书到期前完成轮换,避免节点与管理面失联
- 把节点侧监听端口纳入主机基线核查,覆盖新增节点
- 关注所用版本的已知问题并及时升级
该端口由 kubelet 在节点上监听,不由容器网络代理管理,集群网络策略对它不一定生效。审计时应从节点主机侧核对访问来源与证书授权。
公网暴露的 10250 会带来未授权命令执行风险,可能导致整个节点被控制。云上部署必须在安全组层面禁止外部访问,并关闭已废弃的只读端口。