kube-bench 是对照 cis benchmark 检查 kubernetes 配置合规性的工具,只验配置不扫漏洞;fail 表示明确违规,warn 多因信息缺失需人工确认;在 k3s/microk8s 等发行版上需适配专用配置,否则大量误报。

什么是 kube-bench,它真能测出集群安全问题?
kube-bench 是一个开源工具,直接对照 CIS Kubernetes Benchmark(比如 v1.27 或 v1.28)逐条检查控制平面组件(kube-apiserver、kube-scheduler 等)和节点(kubelet、kube-proxy)的配置是否合规。它不扫描漏洞或网络流量,只验证配置项——比如 --anonymous-auth=false 是否启用、--tls-cert-file 是否存在、etcd 数据目录权限是否为 600。结果不是“安全/不安全”二值判断,而是告诉你哪条基准没过、为什么没过、该改哪个参数。
怎么在节点上运行 kube-bench,不报错却漏检?
常见错误是直接在任意节点执行 ./kube-bench,结果只跑完 node 检查,漏掉 master 组件(因为它们通常不在 worker 节点上运行)。更糟的是:如果用容器方式运行(docker run --rm -v $(pwd):/host aquasec/kube-bench:latest),默认挂载路径不对,kube-bench 找不到 /etc/kubernetes/manifests 或 /var/lib/kubelet/config.yaml,大量检查会标为 WARN 或跳过。
- 确认当前节点角色:用
kubectl get nodes -o wide和ls /etc/kubernetes/manifests/判断是否含kube-apiserver.yaml - worker 节点只运行
kube-bench node;master 节点必须加--benchmark cis-1.27(版本需匹配你集群的 K8s 版本) - 容器运行时,显式挂载关键路径:
-v /etc/kubernetes:/etc/kubernetes:ro -v /var/lib/kubelet:/var/lib/kubelet:ro -v /var/lib/docker:/var/lib/docker:ro - 不要依赖默认
--version auto,它常识别错;手动指定如--version 1.27
输出里 “FAIL” 和 “WARN” 有什么实际区别?
FAIL 表示明确违反 CIS 基准(比如 audit-log-path 未设置),属于高风险配置缺失;WARN 多数是信息不足导致,例如 kube-bench 没找到 etcd 进程 PID,无法读取其启动参数,就标 WARN 而非 FAIL——但这不代表 etcd 安全,只是工具没看到。
-
WARN需人工验证:用ps aux | grep etcd看实际参数,再比对 CIS 第 5.1 节要求 - 某些
FAIL实际可接受:如 CIS 要求禁用kubelet的--anonymous-auth,但若你用外部认证代理,这条可忽略 - 输出 JSON 更实用:
kube-bench master --json > report.json,方便脚本过滤type: "fail"的条目
为什么在 k3s 或 MicroK8s 上跑 kube-bench 总是大量 FAIL?
k3s 和 MicroK8s 不走标准 manifest 目录(/etc/kubernetes/manifests),也不用独立 kube-scheduler 进程,而是集成进单进程。kube-bench 默认按 upstream Kubernetes 结构检查,自然找不到对应组件或参数文件。
- k3s 用
kube-bench --benchmark cis-1.27 --targets master,node --config-dir ./cfg/k3s/,需额外下载 k3s 专用配置(见 aquasecurity/kube-bench GitHub 的cfg/k3s目录) - MicroK8s 需启用
microk8s enable host-access并挂载/var/snap/microk8s/common路径,否则读不到kubelet配置 - 别硬套 CIS 全量检查:k3s 默认关闭
PodSecurityPolicy,但 CIS 1.27 还在检查它——这种 FAIL 属于基准不匹配,应跳过该测试项
真正难的不是跑出报告,是区分哪些 FAIL 是配置疏忽,哪些是架构差异导致的误报。得先看懂你用的发行版怎么实现控制平面,再决定是改配置、调参数,还是换 benchmark 文件。











