Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 32e9bb95e0 | |||
| 8e567edde4 |
@@ -325,18 +325,50 @@ orchestrator becomes a VM. Decouple the two risks instead:
|
|||||||
secret handling) is proven with fast iteration — *then* wrap that exact
|
secret handling) is proven with fast iteration — *then* wrap that exact
|
||||||
service in the VM and solve wiring separately.
|
service in the VM and solve wiring separately.
|
||||||
|
|
||||||
Backend order (cheapest proof → hardest → last):
|
### Slices
|
||||||
|
|
||||||
1. **Docker orchestrator** — nearly free (the sidecar bundle is already
|
Built bottom-up as a stack of small PRs off this one (status: **1–5
|
||||||
containers; collapse N bundles into one persistent container). Proves
|
implemented** in #352 → #356 → #357 → #358 → #360):
|
||||||
consolidation + the `BottleBackend` seam with the least moving parts.
|
|
||||||
2. **Firecracker orchestrator** — the real work: the shim + VM-to-VM
|
1. **Dev-harness core** ✅ — SQLite registry (runtime state) + fail-closed
|
||||||
|
attribution (source IP + identity token) + the HTTP control plane.
|
||||||
|
2. **Launch lifecycle + broker contract** ✅ — `launch_bottle` /
|
||||||
|
`teardown_bottle` + the signed, structured `LaunchBroker` request
|
||||||
|
(HS256 JWT, static ids/flags only, provenance-verified, fail-closed),
|
||||||
|
with a stub broker for the harness and registry rollback on failure.
|
||||||
|
3. **Docker launch broker** ✅ — the first real broker: `docker run` / `rm`
|
||||||
|
per bottle, built only from the request's static fields; proves the
|
||||||
|
`BottleBackend` seam on the cheapest backend.
|
||||||
|
|
||||||
|
**The consolidated-sidecar arc** (the core consolidation win — one
|
||||||
|
persistent sidecar shared by all bottles instead of one per bottle):
|
||||||
|
|
||||||
|
4. **Sidecar — lifecycle** ✅ — the idempotent-singleton `Sidecar` /
|
||||||
|
`DockerSidecar` (ensure-running is a no-op when already up, stop is
|
||||||
|
idempotent); one container per host.
|
||||||
|
5. **Sidecar — build the real bundle image** ✅ — the orchestrator builds
|
||||||
|
the `bot-bottle-sidecars` bundle from `Dockerfile.sidecars` when missing
|
||||||
|
and launches *that* (not a placeholder) as the singleton.
|
||||||
|
6. **Sidecar — source-IP-keyed multi-tenant config** — the functional
|
||||||
|
core: the per-bottle CA / egress routes / git-gate keys / policy, today
|
||||||
|
baked per bottle, become **multi-tenant and selected by the verified
|
||||||
|
source IP**, with per-bottle add/remove (live reload) on launch/teardown
|
||||||
|
through the control plane. Until this lands, one shared instance can't
|
||||||
|
serve multiple bottles' distinct policies.
|
||||||
|
7. **Sidecar — route agent bottles through it** — wire each agent bottle's
|
||||||
|
egress/git to the shared sidecar (DNAT / network) instead of a per-bottle
|
||||||
|
bundle.
|
||||||
|
|
||||||
|
**Remaining backends** (docker done above; the rest against the proven
|
||||||
|
dev-harness):
|
||||||
|
|
||||||
|
8. **Firecracker broker + sidecar** — the real work: the shim + VM-to-VM
|
||||||
routing (host forwards `bbfcN` → orchestrator TAP; the nft table grows
|
routing (host forwards `bbfcN` → orchestrator TAP; the nft table grows
|
||||||
forward rules where today it drops all non-DNAT egress). Built against
|
forward rules where today it drops all non-DNAT egress).
|
||||||
the dev-harness so the app logic is already proven.
|
9. **macOS (Apple container)** — last (container-to-container networking).
|
||||||
3. **macOS (Apple container)** — last (container-to-container networking).
|
|
||||||
|
|
||||||
Keep the sidecar **service one shared thing** throughout.
|
Backends land cheapest-first (docker → firecracker → macOS); keep the
|
||||||
|
sidecar **service one shared thing** throughout.
|
||||||
|
|
||||||
## Non-goals
|
## Non-goals
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user