Repository navigation
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
🌿 Preview your docs: https://nvidia-preview-pr-4656.docs.buildwithfern.com/openshell |
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
f08c78a to
758a70e
Compare
|
Label |
|
Label |
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
|
/ok to test b0041e4 |
Compatibility review (advisory)New or updated breaking changes; see the full report for all findings. 1. state — No explicit risk acceptance foundv0.1.4 persisted only supervisor-initiated
Review details
Advisory review; publication gates are unchanged. |
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Compatibility review (advisory)New or updated breaking changes; see the full report for all findings. 2. helm — No explicit risk acceptance foundLegacy Kubernetes sandbox restart now patches its existing Service, while the baseline out-of-band RBAC contract required only
Review details
Advisory review; publication gates are unchanged. |
pimlock
left a comment
There was a problem hiding this comment.
One small comment.
I walked through backwards compatibility of this change and one thing potentially to look more into is partial downtime during rolling update for kube, where we have both old and new versions running. Added details from investigation here: https://gist.github.com/pimlock/0194dfa3319ce31a0759d037fada76a0
Another thing, but this one is probably okay, is downgrading gateway to older version (e.g. rollback) with Docker or Kube driver would break existing sandboxes. It looks like VM driver gateway could be rolled back without impact.
The sandbox runtime only dials the supervisor-owned control socket, so it does not need write access to the control volume. Mount it read-only in the runtime container and stop staging the control directory through the runtime bundle; the supervisor stager already initializes it through its own writable mount. Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Compatibility review (advisory)New or updated breaking changes; see the full report for all findings. 1. configuration — Risk acceptance could not be verifiedExisting
2. state — Risk acceptance could not be verifiedv0.1.4 persisted only supervisor-initiated descriptors, while v0.1.5 persists runtime-initiated descriptors and redirects new Kubernetes generations to the supervisor.
3. helm — Risk acceptance could not be verifiedRestarting a legacy Kubernetes sandbox now patches its existing Service, whereas the baseline out-of-band RBAC contract granted only
Review details
Advisory review; publication gates are unchanged. |
Keep os-boundary selecting the workload and add os-supervisor for runtime-initiated connections. Bind the mode marker to its runtime generation so a restart by an older gateway does not inherit stale mode metadata. Preserve the legacy Service across creation and restart, validate the active endpoint, and drop the Service patch permission. Signed-off-by: Drew Newberry <anewberry@nvidia.com>
|
@pimlock fixed this in c1c2786. We now keep Tested with old and new gateways sharing a database: new gateway creates → old gateway restarts → new gateway restarts, with exec working after each restart and the legacy Service unchanged. Both that test and the lifecycle E2E passed. This fixes the Kubernetes rolling-upgrade issue; the broader downgrade limitations still apply- but I think that's ok for now. |
Summary
New sandbox generations initiate their protected control connection to the supervisor across Kubernetes, Docker, Podman, and VM. Existing descriptors remain readable, and running legacy sandboxes retain their connection direction. This is an independent prerequisite to the shared-supervisor prototype in #4429.
Only connection establishment changes. The runtime remains the TLS/gRPC server, and the supervisor verifies its generation-pinned identity and supplies the existing bearer credential. No public RPC or operator configuration field is added.
Related Issue
Closes #4652
Changes
openshell-sandbox-backend. Operator-registered endpoints convert into backend-owned transports at the delegated launch boundary. Core and isolation-interface have no changes in this PR; legacy descriptor encodings remain unchanged.os-boundary-<id>as the workload endpoint and addsos-supervisor-<id>for sandbox-initiated connections, with a narrowly scoped control NetworkPolicy. New gateways create both Services and preserve the legacy Service UID, ClusterIP, and selector across restart. The mode marker is bound to the runtime generation so reconciliation recognizes an older gateway’s replacement as legacy. Legacy sandboxes gain the supervisor endpoint when started by a new gateway; the driver no longer patches Service selectors.Each new-mode generation requires compatible supervisor and sandbox runtime binaries; older binaries reject its new descriptors. Kubernetes retains separate fixed endpoints so older gateways can replace a generation with their own compatible pair during a rolling upgrade. Other drivers retain their existing rollback limitations. Connection establishment does not confer ownership or provide HA takeover.
Testing
Current Kubernetes Service compatibility change (
c1c278611):c1c278611) and old gateway (35a3390db, with its matching supervisor/runtime images) run against the same PostgreSQL database. A sandbox created through the new gateway stops/starts through the old gateway, executes successfully, then stops/starts and executes through the new gateway again. Generation markers and the unchanged legacy Service are asserted. The new gateway Deployment has two Ready replicas during the test.Earlier transport validation:
The transport ownership refactor preserves runtime behavior and serialization. The E2E results below were recorded before that type relocation.
policy_localscenario passed an isolated rerun without source changes. The initial sandbox transitioned from Ready to Error with ContainerExited; its cause remains unestablished.The VM library suite passed 256 tests and failed the existing
stopping_a_sandbox_lets_the_supervisor_drain_before_closing_livenesstest. Its shell helper exits before the test reaches the changed transport code; the unchanged helper also exits in a standalone reproduction on this host. This failure remains visible; no assertion was weakened.Before this extension, the rebased Kubernetes implementation passed 8/8 conformance and a full 100/100 Kubernetes E2E rerun with four existing skips. Kubernetes has not been rerun after this transport extension. QEMU is covered by Linux compilation; QEMU and macOS have not received live E2E validation here. CI will validate the pushed revision.
Checklist