Kubernetes 资源操作边界
业务模块持有期望状态,BuildManager 分阶段收敛为 Kubernetes 执行层。
百积木平台的目标边界是把“业务期望状态”和“Kubernetes 执行”分开:业务模块决定 资源为何存在、内容是什么、何时变更和撤销;BuildManager 只执行受控的 Kubernetes 操作。这个边界必须分阶段迁移,不能先删除仍被调用的接口或存量状态。
| 层次 | 目标职责 | 不负责内容 |
|---|---|---|
| 业务模块 | 业务对象、域名与端口规则、目标地址、desiredGeneration、持久化、重试和撤销 | kubeconfig、集群凭据、Kubernetes 权限 |
| BuildManager | Pod 工作负载操作、集群选择、受控 Kubernetes 操作与安全校验 | 新增业务规则、证书签发流程、业务状态决策 |
| Controller | 监听 CR、调和数据面、写 status.observedGeneration 和 Ready | 产生业务期望状态 |
当前迁移阶段
当前只退役没有活跃调用方的两组 BuildManager 接口:
/api/e2b-compatible/**/api/domain-mapping/**
以下接口和状态仍有生产调用方,必须保留:
/api/port-mapping/**/api/route-projections/**domain_mapping、route_outbox表kubernetes_cluster.port_mapping_*配置字段
这是一条发布约束,不是目标架构的例外。Agent Runtime、Browser Session、Hosted Service、Site Service、Domain Binder 及 lowcode 管理面迁移到各自业务状态前,禁止删除 上述接口、表或配置,也禁止用通用资源接口直接替换后立即删库。
最终资源所有权
- Agent Runtime、Browser Session、Hosted Service 分别持有自己
ContainerRoute的业务状态。 - Site Service 持有
WebsiteRoute的业务状态。 - Domain Binder 持有 TLS Secret、
WebsiteChallenge的业务状态和证书生命周期。 - BuildManager 不生成域名、端口映射、业务代次或恢复策略,只执行受安全策略约束的操作。
调用方必须在自己的存储中持有源事实。异步调和流程应在同一数据库事务中写入 Outbox;
同步流程必须等待 Controller 返回 Ready 后才能确认业务操作成功。修改已有对象时先读取
resourceVersion,冲突后重新读取,不得无条件覆盖。
业务事务 -> 期望状态(异步流程同时写 Outbox)
-> BuildManager 受控执行
-> API Server
-> Controller 调和
-> observedGeneration == desiredGeneration && phase == Ready删除路由应发布 state=Absent 的新代次,而不是直接遗忘业务记录。这样延迟到达的旧事件
不能复活已经撤销的路由。
迁移与退役门禁
每一类资源必须独立完成以下步骤,不能合并成一次破坏性发布:
- 明确唯一业务 owner,并在 owner 数据库中建立源事实与 Outbox。
- 发布新生产者和消费者,完成存量记录、CR 与代次迁移。
- 验证重试、冲突、删除墓碑、Controller Ready 和回滚链路。
- 对旧接口做生产流量与代码调用审计,持续确认零调用。
- 先退役路由并观察,再通过独立数据库迁移删除旧表或字段。
数据库迁移不得与接口切换同时删除生产状态。回滚窗口内继续保留旧表、Outbox、CR 和 TLS Secret,直到新 owner 已能完整恢复。
执行层安全约束
BuildManager 的允许列表、固定 namespace、Secret 字段限制和读取脱敏属于平台安全策略。 它们不应包含某个业务的域名、端口、路由生成规则。凭据只授予所需资源和 namespace 的 最小权限,不授予集群管理员权限,也不向调用方暴露 kubeconfig。
时间字段和代次值统一使用 Unix epoch 毫秒整数,公共请求与响应使用 CModel 数据契约。