Files
Deploy-Laboratory/docs/04-08-nodejs-安全上下文.md
2026-03-21 04:36:06 +08:00

52 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04-08-nodejs-安全上下文
> 为 `nodejs-demo` 配置 **Pod / 容器级 `securityContext`**:非 root、只读根文件系统、降权能力等。**以集群 PSP/约束与实际镜像为准**,逐步收紧。
## 前置条件
- 已部署 `nodejs-demo``04-01`)。
- 注意:`node:18-alpine` 默认用户可能为 root非 root 运行需镜像内已有可写目录或使用 `emptyDir` 挂载(见 [`04-09-nodejs-存储与卷.md`](04-09-nodejs-存储与卷.md))。
## 清单路径(唯一真源)
| 本篇完整清单 | [`ansible/files/nodejs-demo/04-08-nodejs-demo.yaml`](../ansible/files/nodejs-demo/04-08-nodejs-demo.yaml) |
| 应用 | `kubectl apply -f ansible/files/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` 等,应改用多阶段构建把依赖打进镜像只读层,或挂卷到可写路径。
## 部署与验证
```bash
kubectl apply -f ansible/files/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`
## 相关文档
- [`04-09-nodejs-存储与卷.md`](04-09-nodejs-存储与卷.md)
- [`04-05-nodejs-资源请求与限制.md`](04-05-nodejs-资源请求与限制.md)