容器安全规范
一、安全基线类:筑牢容器隔离防线
校验点 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