Skip to content

ADR-0008 私有化交付改为 nuwa 中心化

  • 日期:2026-07-28
  • 状态:✅ 生效
  • 取代:原 git + SOPS + Argo 方案
  • 详细设计与开发顺序:nuwa 交付中心

背景

私有化交付原方案按 3 个独立部署客户设计:客户配置放 git 仓库(hiapi-customers),密码用 SOPS/age 加密,客户集群装 Argo CD 主动拉取。

规模重估后,独立部署客户约占总客户三成,每年 100~200 个(约每周 4 个新客户上线,按每客户年升级 6 次算约 1200 次升级/年)。

决定

客户配置与交付编排收拢到 nuwa,由 nuwa 服务端渲染 k8s 清单并下发。

  1. 废弃 hiapi-customers(git 仓库 + SOPS/age 加密)
  2. 废弃 Argo 拉模式,改为 nuwa 中心编排 + 客户侧轻量 agent
  3. YAML 由 nuwa 服务端渲染,客户机器只需 kubectl
  4. 升级通道复用 License V2 已有的心跳 —— 入参加 currentVersion、出参加 targetVersion
  5. 依赖矩阵单一来源是 chart 的 values.yaml,nuwa 解析而非另抄一份

理由

原方案里"手工也还行"的环节,在 100~200/年 的量级全部不成立:手工建客户目录变成每周 4 次,登机器升级变成每天 5 次,而一把 age 私钥要锁住 200 个客户的生产库密码。

不选 Argo:200 个集群意味着 200 份安装、200 个 UI、200 次自身升级,且 Argo 天生不向中心汇报,而分批灰度与失败熔断本来就得在 nuwa 侧另做。agent 路线更贴合中心化模型。

后果

保留(在任何模型下都是前提):配置外部化(prod profile)、hiapi-chart 作为清单模板源、统一 CI、依赖矩阵、建库/Nacos 初始化 Job、购机清单。

得到:age 主私钥丢失即所有客户密码永久无法解密的高危项随之消失

新增风险:所有客户的生产中间件密码集中存在 nuwa 库里,nuwa 成为最高价值目标。要求 MASTER_KEY 列加密,下发脚本按一次性凭据对待。

Argo 那些被放弃的能力仍是刚需 —— 状态回流、分批灰度、健康判定、自动回滚、失败熔断都必须在 agent 与 nuwa 侧自建,agent 不是"30 行 CronJob"。

客户自助升级后端被锁在 Flyway 之后ddl-auto: update 不可预演、不可回滚,不能把这样的按钮交给客户。Flyway 已决定推后,该按钮一并推后。