部署声明也要解析,并确认执行语义
一句话总结
安全部署应当用结构化对象声明以下内容:以摘要固定的镜像、非 root 运行、禁止权限提升、只读根文件系统、资源请求与限制、语义不同的就绪与存活探针,以及 Secret 引用。
为什么字符串搜索很危险
即使在注释里写上 runAsNonRoot: true,Kubernetes 也不会收到任何安全设置。缩进损坏的 YAML 或嵌套路径错误的内容,同样可以包含所有目标字符串。本实验要求用 JSON 格式编写 deployment.yaml;JSON 是 YAML 1.2 的严格子集。评分器会用 Python 标准库解析真实对象,并检查 spec.template.spec.containers 下的值,因此不需要额外的互联网依赖。
镜像必须使用 sha256 摘要固定,而不能依赖可变标签。Pod 安全上下文应包含 runAsNonRoot 与 RuntimeDefault seccomp;容器安全上下文应包含 allowPrivilegeEscalation: false 和 readOnlyRootFilesystem: true。CPU、内存都要同时设置 requests 与 limits,并把 /readyz 和 /healthz 分开。readiness 失败时,实例应从新流量中移除;liveness 失败时,则应触发进程重启。
在实际项目中注入秘密的方法
如果把 DATABASE_URL 的值直接写进清单,凭据就会留在 Git 历史和代码审查页面中。应通过 valueFrom.secretKeyRef 只引用名称与键,真正的秘密由部署系统提供。Dockerfile 应把 Python 3.12 基础镜像固定到摘要,并以数字 UID 运行。CMD 要明确让服务器监听所有接口的 8080 端口。
实际工作的判断标准
成功解析只是第一步。还应以结构化方式检查选择器与 Pod 标签是否一致、容器是否职责单一、探针路径、资源值以及 Secret 引用的形态。在真实集群中,还要加入策略引擎和服务端 dry-run。即使在没有集群的离线会话中,综合评分也要验证难以伪造的核心结构;最后一个模块会把这些选择和故障经验整理成可用于求职的证据。