找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2128

积分

0

好友

271

主题
发表于 昨天 18:29 | 查看: 7| 回复: 0

在 Kubernetes 集群中,有一个关键组件管理着每个节点的“生杀大权”,却也往往成为攻击者最想控制的突破口。

当你评估 Kubernetes 集群的安全态势时,有一个组件的重要性极高却常被忽视——它运行在每个计算节点上,手握创建容器、挂载存储、执行命令的实权,却可能因为配置不当而门户大开:kubelet API

一、kubelet API:每个节点上的“行政主管”

把 Kubernetes 控制平面(如 kube-apiserver)想象成公司的“总部董事会”,负责制定战略和发布指令。每个工作节点就像一家独立运营的分公司。kubelet,则是分公司的行政主管

  1. 它是什么?
    kubelet 是运行在每个工作节点(物理机或虚拟机)上的代理程序。它的核心职责是接收来自“总部”(控制平面)的指令,并确保本节点上的 Pod(容器组)按预期运行。
    kubelet API,就是这位主管对外沟通的“工作电话”和“命令执行窗口”。

  2. 它部署在哪里?
    直接部署并运行在每个工作节点的宿主机操作系统上,通常以系统服务(如 systemd 服务)的形式存在。这意味着它不在容器内部,而是与宿主机共享内核和网络命名空间,天然拥有更高的本地权限边界。

  3. 它的工作原理是怎样的?
    kubelet 会持续处理两类指令来源:

    • 来自“总部”的命令:它主动连接 kube-apiserver,接收“本节点应该运行哪些 Pod”的清单(PodSpec)。
    • 处理外部直接请求:它同时开启一个 HTTPS 服务端(默认端口 10250),这就是 kubelet API。通过这个 API,不仅可以查询节点和 Pod 状态,更关键的是,它还能执行容器内命令、获取容器日志、甚至进行端口转发

二、敏感端口:为什么 10250 端口如此危险

默认情况下,kubelet API 服务会在 所有网络接口(0.0.0.0)10250 端口上监听,这直接扩大了安全暴露面:

  1. 高危操作暴露

    • /exec:可以在运行的容器中执行任意命令。
    • /run:可以启动新容器。
    • /logs:可以抓取所有容器日志,日志中可能包含敏感信息。
    • /portForward:可以建立到容器的网络隧道。
  2. 认证与授权薄弱环节
    在早期版本或配置不当的集群中,kubelet 可能启用匿名访问,或仅依赖较弱的客户端证书认证。
    一旦攻击者能访问该端口,就可能直接控制节点上的 Pod,进一步窃取数据、植入后门或进行横向移动。相关加固讨论也可在 云原生/IaaS 场景中对照你的集群架构逐项核对。

三、关键加固:用宿主机网络隔离降低暴露面

直接回答一个常见且核心的问题:是的,将 Pod 配置为不使用宿主机网络,是降低 kubelet API(10250 端口)暴露风险的关键且有效的一环。
但这只是“一环”,需要放在整体纵深防御中理解。

攻击路径假设:如果攻击者成功进入某个 Pod(例如利用应用漏洞拿到容器权限,甚至进一步触发容器逃逸风险),而该 Pod 又共享宿主机网络命名空间(hostNetwork: true),那么攻击者从容器内部就能直接访问宿主机本地回环地址(127.0.0.1)的 10250 端口,从而绕过外部网络防火墙与边界隔离策略。

防护措施:禁用或严格控制 hostNetwork

  1. 原理
    确保业务 Pod 运行在独立的 Pod 网络命名空间(默认且理想的状态)。即使容器被攻破,攻击者也难以直接触达宿主机本地敏感管理端口(包括 10250、10255 等),从而被限制在 Pod 网络沙箱中。

  2. 实施

    • 在 Pod 规约中,避免设置 spec.hostNetwork: true。除非是系统级 Pod(如 CNI 插件、kube-proxy)确有需要。
    • 使用 Pod 安全标准(PSP)或更新的 Pod 安全准入(PSA),在集群层面强制约束:禁止或仅允许特定服务账户使用主机网络。
    • 对 DaemonSet 等系统工作负载进行专项审计,确保只有必要组件才拥有此特权。

四、构建纵深防御:不只有网络隔离

仅做网络隔离并不够。守护 kubelet 需要组合拳:认证授权、网络访问控制、TLS 强化、审计监控、运行时安全缺一不可。你是否能回答:“谁能访问 10250、访问后能做什么、做过什么、能否被及时发现?”

加固层面 具体措施 安全价值
认证与授权 1. 禁用匿名访问--anonymous-auth=false)。 2. 强制启用 Webhook 授权模式--authorization-mode=Webhook),使 kubelet 的 API 请求接受 kube-apiserver 的 RBAC 统一鉴权。 确保每一个 API 请求都有明确且经过校验的身份与权限。
网络访问控制 1. 使用网络策略(NetworkPolicy),在 CNI 层限制 Pod 对控制平面和节点端口的访问。 2. 在宿主机本地防火墙(如 firewalld、iptables)上,仅允许来自控制平面节点或特定管理 IP 段对 10250 端口的访问,拒绝其他一切来源。 实现网络层“最小权限”,即使凭证泄露,攻击路径也被阻断。
TLS 强化 1. 使用强密码套件,定期轮换 kubelet 的服务端与客户端证书。 2. 确保 API Server 与 kubelet 之间、kubelet 与容器运行时之间的通信均为双向 TLS 认证。 防止通信窃听与中间人攻击。
审计与监控 1. 开启 kubelet 审计日志--audit-log-path),记录所有 API 访问,尤其是对 /exec/run 等高危端点的调用。 2. 在 SOC 监控异常访问模式,如来自非管理网段的 10250 端口连接尝试。 提供可追溯性,并支持实时威胁检测。
运行时安全 部署主机安全代理(HIDS),监测 kubelet 进程异常行为、配置文件篡改及敏感文件访问。 提供最后一层的运行时检测与防护。

总结

kubelet API 是集群工作节点的“咽喉要道”,安全性不容有失。禁用或严格管控 Pod 的宿主机网络模式,是切断一条高危内部攻击路径的有效方法,它能显著降低“容器被攻破后直接演变为节点控制”的概率。

但真正可靠的安全来自体系化落地:把强认证授权、严格网络策略、主机层防火墙、完善证书管理、持续审计监控组合起来,才能为 kubelet 构建从认证到网络、从主机到运行时的立体防护网。这也是把“最小权限原则”和“纵深防御”落实到组件级别的关键实践。




上一篇:Tensor Layout详解:PyTorch/NumPy内存映射与GPU布局优化
下一篇:树莓派Pico+CircuitPython自制USB橡皮鸭教程
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-14 14:15 , Processed in 0.350890 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表