尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

交付前的运维检查

交付前的运维检查 交付前的运维检查以 Helm Chart 缺少securityContext.readOnlyRootFilesystem为例容器写入日志时可能被安全策略拦截并反复重启。复盘结论应落实为模板校验与流水线规则而不是仅记录在会议纪要中。纸面总结的困局为什么事故复盘总是流于形式大部分技术团队的事故复盘流程都停留在“开会、致歉、写 Wiki”这三板斧上这种模式存在三大致命缺陷依靠人的记忆力复盘结论写在 Wiki 某个深层页面新员工入职或老员工疲劳时根本无法主动查阅。缺乏代码级卡点复盘提出了“以后必须加配置”但 CI 流水线里的git push依然畅通无阻。架构决策ADR漂移随手修改了 GitOps 里的声明式配置没有追溯与策略比对导致生产环境与设计初衷背道而驰。真正能够派上用场的复盘必须形成一个闭环事故 $\rightarrow$ 复盘 $\rightarrow$ 提取代码约束 (Rego) $\rightarrow$ CI 硬性卡点。从文字复盘到代码化约束用 OPA (Open Policy Agent) 重构 CI 规则在 GitOps 模式下所有的集群状态都是以 YAML 或 JSON 形式保存在 Git 仓库中的。这就为使用OPA (Open Policy Agent)进行确定性策略校验提供了完美的土壤。每次事故发生后复盘的第一产出不应该是 Markdown而应该是一段Rego 策略代码。确定性复盘转换公式$$\text{PostMortem Conclusion} \implies \text{Rego Rule} \implies \text{Conftest Integration}$$例如复盘结论为“不允许应用挂载 HostPath 宿主机路径”直接转化为 Rego 校验规则。生产实践代码防止 HostPath 挂载与只读根文件系统的 Rego 策略以下是针对 Kubernetes Deployment Manifest 的确定性 OPA Rego 校验脚本放置在 GitOps 仓库的policy/k8s_safety.regopackage main # 规则 1复盘 INCIDENT-2026-02 沉淀——禁止容器使用 HostPath 挂载宿主机路径 deny[msg] { input.kind Deployment volume : input.spec.template.spec.volumes[_] volume.hostPath msg : sprintf([Policy Violation] Deployment %s is using hostPath volume %s. This is forbidden by ADR-005., [input.metadata.name, volume.name]) } # 规则 2复盘 INCIDENT-2026-05 沉淀——生产容器必须开启只读根文件系统 deny[msg] { input.kind Deployment container : input.spec.template.spec.containers[_] not container.securityContext.readOnlyRootFilesystem true msg : sprintf([Policy Violation] Container %s in Deployment %s must set securityContext.readOnlyRootFilesystemtrue., [container.name, input.metadata.name]) }配合上述 Rego 规则在 GitHub Actions 或 GitLab CI 中添加确定性检测步骤name: GitOps Policy Enforcement on: pull_request: paths: - manifests/** jobs: conftest-policy-check: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkoutv4 - name: Setup Conftest run: | wget https://github.com/open-policy-agent/conftest/releases/download/v0.50.0/conftest_0.50.0_Linux_x86_64.tar.gz tar xzf conftest_0.50.0_Linux_x86_64.tar.gz sudo mv conftest /usr/local/bin/ - name: Run Policy Check against Post-Mortem Rules run: | # 校验 manifests 目录下所有的 YAML 文件一旦违反规则直接以 Error code 1 阻断 PR conftest test manifests/ --policy policy/可复制的项目复盘与 ADR 决策模版为了保证复盘记录能直接翻译为 OPA 规则建议团队统一使用以下代码化复盘模板## 事故复盘与策略演进记录 ## 1. 事故背景 (Context) 在 2026-08-21 的部署中payment-gateway 服务因为配置文件错将容器运行权限设置为 Root 且挂载了宿主机 /var/run/docker.sock触发了安全告警并被安全组强制隔离。 ## 2. 决策与规则变更 (Decision Rule Action) 我们决定不再通过人工 Code Review 检查此类隐患而是将限制硬编码为 CI 策略。 - **新增 Rego 策略文件**policy/prevent_docker_sock.rego - **卡点位置**GitOps 仓库 PR 合并校验阶段 - **例外机制**如需特权访问必须由 Security Team 在 YAML 中显式添加 Annotation policy.company.com/bypass: ApprovedBySec ## 3. 本地验证指令 bash : 开发者在本地提交前的自检指令 conftest test manifests/overlays/production/不要让惨烈的故障白白发生。**把每一篇复盘报告翻译成一条 Rego 策略把每一次经验教训锁进 CI 流水线**才是云原生工程团队最硬核的技术沉淀。
返回列表