Files
Deploy-Laboratory/docs/04-08-nodejs-安全上下文.md
jack 8c43761962 feat: 按 doc_id 重组 ansible/files 与验证框架
- 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
2026-03-26 07:01:14 +08:00

2.4 KiB
Raw Blame History

04-08-nodejs-安全上下文

nodejs-demo 配置 Pod / 容器级 securityContext:非 root、只读根文件系统、降权能力等。以集群 PSP/约束与实际镜像为准,逐步收紧。

前置条件

  • 已部署 nodejs-demo04-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减少被攻击后的影响面。
  • 只读根盘:系统目录不让写;应用要写临时文件,必须单独挂 可写卷(示例用 /tmpemptyDir)。
  • 渐进收紧:先在一个测试命名空间试,再推广;强策略集群可能被准入控制器拦截。

相对 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 Runningid 显示非 rootrunAsUser 一致)。

失败排查

  • permission denied:写只读路径;增加 emptyDir/PVC 挂载或放宽 readOnlyRootFilesystem
  • 镜像必须以非 root UID 可运行:部分官方镜像入口脚本要求 root需换镜像或自定义 Dockerfile。
  • 集群 Pod Security / Kyverno 等策略拦截:读策略报错信息调整字段。
  • 06-01-k3s-networkpolicy-故障排查.md

相关文档