易君召
发布于 2026-08-05 / 作者:易君召 / 1 阅读
0

Kubernetes 集群安全防护要点

K8s 安全遵循 4C 安全模型:Cloud(云基础设施)、Cluster(K8s 集群)、Container(容器)、Code(应用代码),下面分维度整理生产环境核心防护要点,覆盖集群、认证授权、网络、镜像、运行时、日志审计、运维、业务侧。

一、集群基础设施层面(Cloud)

  1. 底层节点安全

    • 节点操作系统最小化安装,关闭不必要服务、端口,定期系统补丁更新;

    • 节点禁止直接暴露公网,使用跳板机 / 堡垒机登录,限制 SSH 登录,禁用 root 远程登录;

    • 控制平面(master/control‑plane)节点做物理 / 网络隔离,不运行业务 Pod。

  2. API Server 访问防护

    • 禁止 API Server 直接对公网暴露,通过负载均衡 + 白名单 IP 访问;

    • 关闭不安全端口:关闭 8080 非认证端口,仅使用 6443 TLS 加密端口;

    • 禁用匿名访问:--anonymous-auth=false,拒绝未认证请求。

  3. etcd 数据库安全

    • etcd 存储全部集群敏感数据,必须开启 TLS 双向认证

    • etcd 不对外暴露,仅 control‑plane 组件访问;

    • 定期加密备份 etcd 数据,备份文件严格权限管控。

  4. 控制平面组件加固

    • kube‑controller‑manager、kube‑scheduler 不开启未认证 http 接口;

    • kube‑proxy 使用 iptables/ipvs 模式,关闭不必要的 metrics 公网暴露。

二、认证与授权(Cluster 访问控制)

  1. 认证 Authentication

    • 优先使用 ServiceAccount、OIDC、证书认证,尽量少用静态 token、静态密码;

    • 用户证书设置合理过期时间,及时回收离职人员证书;

    • ServiceAccount:非必要不使用 default serviceAccount,每个业务命名空间创建独立 sa。

  2. 授权 Authorization:RBAC 是核心

    • 绝对禁止集群管理员 cluster-admin 权限随意分配给业务账号、ServiceAccount

    • 遵循最小权限原则,Role/ClusterRole 精确配置资源权限,区分 namespace 级别与集群级别权限;

    • 禁止通配符 * 权限,业务账号只给所需资源增删改查;

    • 审计检查高危权限:pod exec、pod attach、create pods、secrets 读取权限。

  3. 准入控制 Admission Controller

    • 开启关键准入插件:NodeRestrictionPodSecurityValidatingAdmissionWebhook

    • 使用 PodSecurity(PSP 替代品),按命名空间设置安全级别:privileged/baseline/restricted;

    • 引入 OPA/Gatekeeper 自定义准入策略,拦截非法 Pod 配置(特权容器、hostPath、hostNetwork 等)。

三、Pod & 容器安全(Container)

  1. 禁用特权容器

    • 禁止 privileged: true

    • 禁止授予高危 capabilities,删除 ALL,只按需添加必要 cap;

    • 禁止直接使用 hostPID、hostIPC、hostNetwork,业务尽量不要共享宿主机命名空间。

  2. 文件系统与权限

    • 容器不以 root 用户运行,设置securityContext.runAsNonRoot: true,指定普通 UID;

    • 文件系统只读 readOnlyRootFilesystem: true,只挂载必要 tmp 空目录;

    • 限制 hostPath 挂载,禁止挂载宿主机 //etc/proc、docker.sock;

    挂载 docker.sock = 容器逃逸高危风险。

  3. Secrets 敏感信息防护

    • Secret 不要明文存于 ConfigMap,不要硬编码在镜像、yaml;

    • 生产建议对接外部密钥管理:Vault、KMS,不依赖原生 Secret(仅 base64 编码,非加密);

    • 限制 ServiceAccount 读取 Secret 权限。

  4. 资源与逃逸限制

    • 设置 Pod resources.limits CPU/memory,防止 DoS 耗尽节点资源;

    • 配置 seccompProfileappArmorProfile,限制系统调用,降低容器逃逸风险。

四、镜像安全

  1. 镜像仓库管控

    • 使用私有镜像仓库 Harbor,禁止直接拉取公共未审核镜像;

    • 镜像仓库开启 TLS,开启身份认证,禁止匿名拉取;

    • 镜像策略:禁止 latest 标签,必须使用固定版本 tag。

  2. 镜像漏洞扫描

    • CI/CD 流水线集成镜像扫描(Trivy、Clair),高危漏洞镜像禁止部署;

    • 禁止镜像内置 ssh、curl、netcat 等黑客工具,镜像最小化(distroless)。

  3. 镜像来源校验

    • ImagePolicyWebhook 校验镜像来源,只允许信任仓库镜像部署;

    • 生产可使用镜像签名(cosign)校验镜像完整性。

五、网络安全

  1. NetworkPolicy 网络策略

    • 开启 CNI 支持 NetworkPolicy,默认拒绝 Pod 之间互通,按需放行;

    • 不同业务、不同命名空间做网络隔离,限制 Pod 访问 kube‑api、etcd。

  2. Service 与 Ingress 防护

    • 尽量不用 NodePort 大范围暴露业务;

    • Ingress 开启 TLS,强制 HTTPS,配置 WAF 防护;

    • 禁止创建 ClusterIP/NodePort 类型访问集群内部敏感服务(metrics、kube‑proxy)。

  3. Metrics 监控接口

    • kubelet、kube‑api metrics 接口不对外暴露,使用 RBAC 限制访问,不要 0.0.0.0 开放。

六、日志、审计、监控

  1. 开启 K8s 审计日志 Audit Log

    • api-server 开启 audit,记录所有集群操作(创建 pod、读取 secret、rbac 变更);

    • 审计日志持久化,不可篡改,保存足够周期,用于安全溯源。

  2. 组件日志收集

    • 收集节点、kubelet、容器标准输出日志,集中存储 ELK/Loki;

  3. 安全检测

    • 部署安全检测工具:Falco(运行时异常行为检测,容器逃逸、特权调用告警);

    • 定期集群安全基线检查:kube‑bench。

七、运维与供应链安全(Code)

  1. CI/CD 流水线安全

    • 流水线账号最小权限,CI 账号不能持有 cluster‑admin;

    • 流水线 yaml 不要硬编码密钥,使用密钥管理器注入。

  2. 版本升级

    • K8s 集群持续升级小版本,修补已知 CVE 漏洞,不要长期停留在老旧版本;

    • kubelet、容器运行时(containerd)同步升级。

  3. 容器运行时安全

    • 弃用 docker shim,使用 containerd;

    • 加固运行时配置,限制容器逃逸向量。

  4. 备份与灾难恢复

    • etcd 定期加密备份,测试恢复演练;

    • 重要 namespace 资源 yaml 版本管理。

八、常见高危坑(生产一定要规避)

  1. ServiceAccount 挂载给 Pod,该 sa 拥有 cluster‑admin 权限;

  2. Pod 挂载宿主机/var/run/docker.sock,直接接管宿主机;

  3. 大量 pod 使用 privileged 特权模式;

  4. API Server 暴露公网,无 IP 白名单,开启匿名访问;

  5. 不启用 NetworkPolicy,所有 Pod 网络互通;

  6. Secret 直接写在 yaml,提交 git 仓库;

  7. 业务 Pod 使用 hostNetwork、hostPID。

工具清单参考

  • 基线检查:kube‑bench

  • 运行时检测:Falco

  • 准入策略:OPA Gatekeeper

  • 镜像扫描:Trivy

  • 密钥管理:HashiCorp Vault

  • Pod 安全:PodSecurity