PR #4 (Closes #3) mounts the filtered dstack broker as a unix socket at /run/broker/dstack.sock into attested app containers. But the daemon runs tenants under runsc (gVisor) via DAEMON_CONTAINER_RUNTIME, and a gVisor sandbox has its own kernel, so a process inside cannot connect() to a host/runc-owned unix socket even when bind-mounted.
Confirmed live: a tenant under runsc fails to reach /run/broker/dstack.sock (curl exit 7), while a runc-pinned hermes reaches its proxy socket fine. This is the same "gVisor can't reach host resources" family as #2 (gVisor DNS at 127.0.0.11).
Fix options
- (B) Register a runsc runtime variant with
--host-uds so gVisor proxies the host socket (needs CVM runtime re-provisioning).
- (C) Also serve the broker over TCP on the attested network and inject a
BROKER_URL (gVisor TCP-by-IP works, avoids the DNS path).
An interim unblock just landed via a per-project runc opt-out (see PR below) — that is only acceptable for TRUSTED data-plane tenants; B or C is required for UNTRUSTED tenants under gVisor.
Cross-reference: #2, #3, #4.
PR #4 (Closes #3) mounts the filtered dstack broker as a unix socket at
/run/broker/dstack.sockinto attested app containers. But the daemon runs tenants under runsc (gVisor) viaDAEMON_CONTAINER_RUNTIME, and a gVisor sandbox has its own kernel, so a process inside cannotconnect()to a host/runc-owned unix socket even when bind-mounted.Confirmed live: a tenant under runsc fails to reach
/run/broker/dstack.sock(curl exit 7), while a runc-pinnedhermesreaches its proxy socket fine. This is the same "gVisor can't reach host resources" family as #2 (gVisor DNS at 127.0.0.11).Fix options
--host-udsso gVisor proxies the host socket (needs CVM runtime re-provisioning).BROKER_URL(gVisor TCP-by-IP works, avoids the DNS path).An interim unblock just landed via a per-project
runcopt-out (see PR below) — that is only acceptable for TRUSTED data-plane tenants; B or C is required for UNTRUSTED tenants under gVisor.Cross-reference: #2, #3, #4.