Appearance
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 清单并下发。
- 废弃
hiapi-customers(git 仓库 + SOPS/age 加密) - 废弃 Argo 拉模式,改为 nuwa 中心编排 + 客户侧轻量 agent
- YAML 由 nuwa 服务端渲染,客户机器只需
kubectl - 升级通道复用 License V2 已有的心跳 —— 入参加
currentVersion、出参加targetVersion - 依赖矩阵单一来源是 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 已决定推后,该按钮一并推后。