- ansible/files 改为与文档 XX-YY 对齐的目录结构,更新相关 playbook 路径 - 新增 scripts/verify.sh 与 ansible/playbooks/verify/*.yml,移除单体 verify-matrix.yml - 补充 docs/00-02 矩阵状态、00-05 验证框架与流程、00-04 环境与 ylc65 工作机说明 - 增加 k3s 存储准备、Longhorn、local-path 等 playbook 与辅助脚本 Made-with: Cursor
2.4 KiB
2.4 KiB
04-08-nodejs-安全上下文
为
nodejs-demo配置 Pod / 容器级securityContext:非 root、只读根文件系统、降权能力等。以集群 PSP/约束与实际镜像为准,逐步收紧。
前置条件
- 已部署
nodejs-demo(04-01)。 - 注意:
node:18-alpine默认用户可能为 root;非 root 运行需镜像内已有可写目录或使用emptyDir挂载(见04-09-nodejs-存储与卷.md)。
清单路径(唯一真源)
| 本篇完整清单 | ansible/files/04-01-nodejs-demo/04-08-nodejs-demo.yaml |
| 应用 | kubectl apply -f ansible/files/04-01-nodejs-demo/04-08-nodejs-demo.yaml |
场景说明(白话)
- 降权:用非 root 用户跑 Node,减少被攻击后的影响面。
- 只读根盘:系统目录不让写;应用要写临时文件,必须单独挂 可写卷(示例用
/tmp的emptyDir)。 - 渐进收紧:先在一个测试命名空间试,再推广;强策略集群可能被准入控制器拦截。
相对 04-07 的变更(原文 → 新文)
| 位置 | 原文(04-07) |
新文(04-08) |
|---|---|---|
template.spec.securityContext |
(无) | fsGroup: 1000 |
containers[].securityContext |
(无) | runAsNonRoot / runAsUser: 1000 / readOnlyRootFilesystem: true 等 |
volumeMounts / volumes |
仅默认 | emptyDir 挂 /tmp |
若应用需写 node_modules 等,应改用多阶段构建把依赖打进镜像只读层,或挂卷到可写路径。
部署与验证
kubectl apply -f ansible/files/04-01-nodejs-demo/04-08-nodejs-demo.yaml
kubectl get pod -l app=nodejs-demo -n default
kubectl exec deploy/nodejs-demo -n default -- id
预期:Pod Running;id 显示非 root(与 runAsUser 一致)。
失败排查
- permission denied:写只读路径;增加
emptyDir/PVC挂载或放宽readOnlyRootFilesystem。 - 镜像必须以非 root UID 可运行:部分官方镜像入口脚本要求 root,需换镜像或自定义 Dockerfile。
- 集群 Pod Security / Kyverno 等策略拦截:读策略报错信息调整字段。
06-01-k3s-networkpolicy-故障排查.md