文章背景图

Kubernetes 集群与节点加固:从主机基线到 kube-bench

2026-07-25
4
-
- 分钟

Kubernetes 的安全上限取决于底层主机、控制面配置和日常运维。应用即使配置得很严格,节点一旦失陷,攻击者仍可能读取容器数据、凭证和网络流量。本文给出一套可执行的加固清单,并说明 kube-bench 应该怎样使用。

## 1. 先明确边界

集群加固至少覆盖四层:

1. 操作系统与账号。

2. 容器运行时与 kubelet。

3. API Server、Controller Manager、Scheduler 和 etcd。

4. 网络、日志、补丁与备份。

托管 Kubernetes 会替你管理一部分控制面,但节点、工作负载权限、网络策略和镜像安全仍由使用者负责。

## 2. 主机系统基线

- 使用受支持、精简的 Linux 发行版,关闭无关服务和端口。

- 及时安装安全更新,先在测试节点验证,再滚动到生产节点。

- 禁止 root 直接远程登录,使用个人账号、密钥和受控 sudo。

- 开启时间同步,保证证书、日志和审计时间一致。

- 为 Kubernetes 数据、容器数据和日志设置容量监控。

- 限制对 /etc/kubernetes、kubelet 配置、PKI 目录和 etcd 数据目录的访问。

- 防火墙只允许控制面、节点和运维网络真正需要的端口。

节点维护时先执行 drain,完成加固与重启检查后再 uncordon,避免直接中断业务。

## 3. kubelet 与容器运行时

kubelet 是节点上的高权限组件。应关闭匿名访问,使用 webhook 认证与授权,保护只读端口,避免公开调试接口。容器运行时 socket 等同于主机高权限入口,不要挂载给普通 Pod。

同时建议:

- 使用受支持的 containerd 或 CRI-O 版本。

- 默认启用 seccomp RuntimeDefault。

- 避免特权容器和主机命名空间。

- 限制 hostPath;确需挂载时设置最小目录和只读属性。

- 使用 cgroup 与资源 requests/limits,降低资源耗尽风险。

## 4. 控制面与 etcd

API Server 应仅通过 TLS 暴露,并限制到可信网络。认证、RBAC 和准入控制需要同时工作。etcd 中保存了集群状态和 Secret,应使用双向 TLS、限制监听地址、开启静态数据加密并定期备份。

常见检查点:

- 控制面 PKI 私钥只有 root 可读。

- Scheduler、Controller Manager 的非安全监听接口不暴露。

- Admission 插件和审计策略已启用。

- ServiceAccount 私钥、bootstrap token 和 kubeconfig 有轮换机制。

- etcd 快照经过恢复演练,而不只是“备份文件存在”。

## 5. 用 kube-bench 做 CIS 棈查

kube-bench 根据 CIS Kubernetes Benchmark 检查集群配置。它适合发现权限、参数和文件配置问题,但结果不是自动修复命令,也不能替代威胁建模。

一种常见运行方式是使用项目提供的 Job:

```bash

kubectl apply -f job.yaml

kubectl get pods

kubectl logs job/kube-bench

```

因为部分检查需要读取宿主机进程和目录,运行清单通常具有较高权限。应先审查 YAML,在维护窗口运行,完成后删除,并严格限制谁能创建这类 Job。

解读结果时:

- PASS:当前检查项通过,不等于整个集群安全。

- FAIL:确认版本、部署方式和业务需求,再制定修复计划。

- WARN:需要人工判断,记录接受风险或补偿措施。

- INFO:提供背景或手工检查说明。

Kubernetes 版本与 CIS 基准版本不是一一对应,运行前要确认 kube-bench 支持的测试集合。

## 6. 修复流程

1. 导出扫描结果并按控制面、节点、策略分类。

2. 先处理高影响且低风险的权限和暴露问题。

3. 在非生产环境修改静态 Pod 清单或组件参数。

4. 观察 API Server、etcd、kubelet 和业务健康状态。

5. 每次只做一组可回滚变更。

6. 重新扫描,并把例外项记录到风险清单。

## 7. 日常检查清单

- 每月检查补丁、证书、RBAC、公开端口和审计日志。

- 每季度执行基线扫描、etcd 恢复演练和账号复核。

- 重大升级后重新验证 Pod Security、NetworkPolicy 与安全工具兼容性。

- 发现节点异常时,先隔离节点,保护证据,再评估是否重建;不要只重启进程后继续使用。

## 参考资料

- https://github.com/aquasecurity/kube-bench

- https://kubernetes.io/docs/concepts/security/security-checklist/

- https://kubernetes.io/docs/concepts/security/linux-kernel-security-constraints/

原创

Kubernetes 集群与节点加固:从主机基线到 kube-bench

本文链接: Kubernetes 集群与节点加固:从主机基线到 kube-bench

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录