容器安全规范

一、安全基线类:筑牢容器隔离防线

校验点 1:强制非 Root 用户运行(securityContext 深化)

规范写法

securityContext:
  runAsNonRoot: true       # 禁止root用户
  runAsUser: 1000          # 指定普通用户ID
  fsGroup: 1000            # 容器内文件组权限
  allowPrivilegeEscalation: false # 禁止权限提升

错误示范

省略allowPrivilegeEscalation,导致恶意程序通过setuid提权。

风险:容器逃逸概率增加 87%(CNCF 安全报告)。

校验点 2:禁用特权容器与只读文件系统

规范写法

securityContext:
  privileged: false        # 禁用特权容器
containers:
name: app
  securityContext:
    readOnlyRootFilesystem: true # 根文件系统只读
  volumeMounts:
  - name: temp-volume      # 仅在必要目录挂载可写卷
    mountPath: /tmp
volumes:
name: temp-volume
  emptyDir: {}

依据:K8s 安全最佳实践要求,特权容器可直接访问宿主机内核。

二、可用性保障类:避免服务假活与中断

校验点 3:三探针协同配置(覆盖全生命周期)

规范写法

错误示范:仅配置livenessProbe,导致服务未就绪被频繁重启。

案例:某支付系统因缺失startupProbe,SpringBoot 服务启动阶段被误杀。

校验点 4:拒绝独立 Pod,绑定工作负载

规范写法:用 Deployment 管理 Pod

错误示范:直接创建独立 Pod,节点故障后无法自动恢复。

三、性能优化类:提升资源利用率

校验点 5:精准配置资源请求与限制

规范写法

依据:内存密集型应用若 request 不足,易被 OOM Kill;limit 过高导致资源浪费。

校验点 6:副本调度优化(反亲和 + 拓扑传播)

规范写法

效果:节点故障时服务可用性提升至 99.9%。

校验点 7:污点与容忍度实现节点隔离

规范写法

场景:将数据库、缓存等核心服务调度到专用节点。

四、基础规范类:规避低级错误

校验点 8:API 版本与标签规范

规范写法

错误示范:使用apiVersion: v1创建 Deployment(实际需 apps/v1)。

工具校验:kubeval 可自动检测 API 版本兼容性。

校验点 9:禁用危险主机配置

禁止写法

替代方案:用 NodePort 或 Ingress 暴露服务,示例:

五、自动化校验类:提前拦截问题

校验点 10:集成 CI/CD 配置校验

本地双工具校验

GitHub Actions 流水线集成

效果:某团队集成后,YAML 配置故障减少 62%。

附:新人避坑清单

错误类型

检测工具

修复优先级

缺失资源限制

kube-score

紧急

使用 Root 用户

kube-score

紧急

API 版本过时

kubeval

未配置探针

kube-score

共享主机网络

kubeval

以下是一个符合生产级规范的 Java Demo Web 项目 K8s 资源清单文件

Last updated