百积木文档
开发指南后端开发

Kubernetes 资源操作边界

业务模块持有期望状态,BuildManager 分阶段收敛为 Kubernetes 执行层。

百积木平台的目标边界是把“业务期望状态”和“Kubernetes 执行”分开:业务模块决定 资源为何存在、内容是什么、何时变更和撤销;BuildManager 只执行受控的 Kubernetes 操作。这个边界必须分阶段迁移,不能先删除仍被调用的接口或存量状态。

层次目标职责不负责内容
业务模块业务对象、域名与端口规则、目标地址、desiredGeneration、持久化、重试和撤销kubeconfig、集群凭据、Kubernetes 权限
BuildManagerPod 工作负载操作、集群选择、受控 Kubernetes 操作与安全校验新增业务规则、证书签发流程、业务状态决策
Controller监听 CR、调和数据面、写 status.observedGenerationReady产生业务期望状态

当前迁移阶段

当前只退役没有活跃调用方的两组 BuildManager 接口:

  • /api/e2b-compatible/**
  • /api/domain-mapping/**

以下接口和状态仍有生产调用方,必须保留:

  • /api/port-mapping/**
  • /api/route-projections/**
  • domain_mappingroute_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 的新代次,而不是直接遗忘业务记录。这样延迟到达的旧事件 不能复活已经撤销的路由。

迁移与退役门禁

每一类资源必须独立完成以下步骤,不能合并成一次破坏性发布:

  1. 明确唯一业务 owner,并在 owner 数据库中建立源事实与 Outbox。
  2. 发布新生产者和消费者,完成存量记录、CR 与代次迁移。
  3. 验证重试、冲突、删除墓碑、Controller Ready 和回滚链路。
  4. 对旧接口做生产流量与代码调用审计,持续确认零调用。
  5. 先退役路由并观察,再通过独立数据库迁移删除旧表或字段。

数据库迁移不得与接口切换同时删除生产状态。回滚窗口内继续保留旧表、Outbox、CR 和 TLS Secret,直到新 owner 已能完整恢复。

执行层安全约束

BuildManager 的允许列表、固定 namespace、Secret 字段限制和读取脱敏属于平台安全策略。 它们不应包含某个业务的域名、端口、路由生成规则。凭据只授予所需资源和 namespace 的 最小权限,不授予集群管理员权限,也不向调用方暴露 kubeconfig。

时间字段和代次值统一使用 Unix epoch 毫秒整数,公共请求与响应使用 CModel 数据契约

本页内容