ranganathan-a/Order_API_Incident_Response-Deriv

GitHub: ranganathan-a/Order_API_Incident_Response-Deriv

针对 Kubernetes 生产环境 orders-api 部署事故的根因分析、修复方案与运维 runbook 全套实践项目,附带 manifest 静态校验脚本和可观测性设计。

Stars: 0 | Forks: 0

# orders-api 生产事故 — 提交 ## 已完成内容 **必须完成(共 4 项):** - `incident_analysis.md` — 五个根本原因(Service/container 端口不匹配、 readiness probe 路径错误、liveness/readiness probe 配置互换、memory limit 设置过小、导致容量丢失的 rollout 策略),外加一个次要的凭证发现,每项都 关联到具体证据,包含需要首先运行的命令以及需要验证的已声明假设。 - `solution/deployment-and-service.yaml` — 修正后的 Deployment + Service, 解决了全部五个故障,为 DB 凭证使用 Secret 引用 (不包含任何真实或虚假的 secret 值)。 - `runbook.md` — 部署前验证、rollout 顺序、部署后检查、 成功/失败信号,以及 rollback 触发器 + 操作流程。 - `AI_USAGE.md` — 本次提交是如何在 AI 辅助下完成的,以及 每项声明/命令/manifest 是如何被检查的,而不是直接全盘接受。 **建议尝试(共 2 项):** - `observability.md` — 5 个指标/告警,包括一个多窗口 burn-rate SLO 告警、dashboard/log 字段指导,以及一个 CI/CD 预防性检查。 - `tests/validate.sh` — 一个可在 bash 中运行的 Python 验证器,检查 Service/ container 端口匹配、probe 路径契约、明文凭证检测, 以及 resource request/limit 的合理性。已针对修正后的 manifest(通过)和原始损坏的 manifest(失败,捕获了端口不匹配、错误的 probe 路径和明文凭证)进行了验证。 **进阶(共 2 项,设计层面):** - `stretch.md` — 一个需审批的 AI 分诊工作流设计(只读分诊 → 强制人工审批 → 限定范围的操作阶段),并针对 secret、prompt injection、幻觉命令和权限范围设置了防护措施;以及 一项针对 Service 端口故障模式的受控弹性测试。 ## 所做假设 - 应用程序在 1.9.0 版本中确实绑定了 8080 端口(根据其自身的日志行),并且 Service 只是未更新以与之匹配 —— 修复方案更新了 Service, 而不是应用程序。 - 1.9.0 版本中的 `/live` 如文档所述是轻量且无依赖的;这在 提供的日志中没有直接证据,因此被指出为在依赖其进行 liveness 检查之前需要进行冒烟测试。 - 对于 `orders-api-db-credentials`,存在(或可创建)现有的 Kubernetes Secret 机制; 根据禁止嵌入真实/虚假凭证的约束,此处未创建任何 Secret。 - 由于没有可用的活动集群,所有验证命令均为示例性说明, 但编写时确保了技术上的正确性,并且可以直接在与给定证据相匹配的真实的 `production` namespace 中运行。 ## 如何检查或运行相关产物 ``` # 从结构上和针对 4 项 checks 验证更正后的 manifest: bash tests/validate.sh solution/deployment-and-service.yaml # (可选)针对真实 cluster 进行 dry-run(如果可用): kubectl apply --dry-run=server -f solution/deployment-and-service.yaml ``` 依次阅读 `incident_analysis.md` → `solution/deployment-and-service.yaml` → `runbook.md`,以遵循从诊断到修复再到验证的 流程;`observability.md` 和 `stretch.md` 为补充材料。 ## 耗时 在必须完成项上花费了约 45 分钟,加上在 建议尝试项和进阶项上额外花费的时间。 ## 如果有更多时间,我将进行的改进 - 实际启动一个 kind/minikube 集群,实时复现端口不匹配和 OOM 故障模式,而不是仅仅依赖 manifest 层面的推理和 静态验证器。 - 将 `tests/validate.sh` 扩展为一个真正的 CI 任务(例如 GitHub Actions),在 每个涉及 manifest 的 PR 上运行,并在 自定义检查之外加入 `kubeconform`/schema 验证。 - 添加实际的 PodDisruptionBudget 和 HorizontalPodAutoscaler 考量, 因为在节点维护期间,固定的 `replicas: 3` 加上 `maxUnavailable: 0` 会与 集群级别的中断预算相互作用,而不仅仅是应用程序的 rollout。 - 将第 7 部分的分诊工作流作为一个小脚本,针对真实的(沙盒化的)集群进行原型设计, 而不是仅仅停留在设计层面。
标签:子域名突变, 应用安全, 故障排查, 运维, 逆向工具