Components
Sandbox isolation
Sandboxes run arbitrary, untrusted images, so isolation is layered and enforced outside the workload:- Every sandbox pod runs under gVisor (the
runscruntime class), a user-space kernel between the workload and the host. A cluster admission policy pins this invariant: a sandbox that does not request gVisor, or requests host namespaces or host-path mounts, is refused at the Kubernetes API server. - The dedicated workload namespace enforces the Kubernetes
baselinepod security standard as defense in depth, and sandbox pods carry no Kubernetes service-account token. - A namespace-wide egress policy allows DNS, the public internet, and the API’s dedicated capture listener. The workload has no capture proof, so that listener rejects it; all other cluster services, private address ranges, and the cloud metadata endpoint are unreachable. See network access.
- Admission fails closed: a request the deployment cannot enforce exactly (an unavailable
storage class, mount transport, or injection path) is rejected with
unsupported_capability, never silently weakened.
Shell access
hiloop sandbox ssh <name> opens an interactive shell in a sandbox. Your end is stock OpenSSH: a
normal ssh client, with no jump host, no public port on the sandbox, and no SSH credential for you
to create, install, or rotate.
Inside the sandbox, the server is a single static binary that runs in your workload container, so
a shell starts in your image’s filesystem as your image’s own user. It is started by a lifecycle hook
and mounted read-only; your image’s entrypoint runs unmodified and your container gains nothing else.
The ssh client’s ProxyCommand re-invokes the hiloop CLI, which opens one authenticated HTTPS
connection to the API and upgrades it to a byte stream. The API is the only authority on the path.
It authorizes the caller against the organization that owns the sandbox, confirms the sandbox is
running, resolves that sandbox’s currently running instance, opens a connection to it, and splices
the bytes. The check runs on every connect, and nothing the client sends chooses the target.
known_hosts entry and asserts it as
authoritative ssh command-line options, so neither your own -o StrictHostKeyChecking=no nor a
Host * block in ~/.ssh/config can downgrade it. Two consequences worth knowing: you never see a
trust-on-first-use prompt, because the key arrives over the authenticated API rather than from the
network, and a recreated sandbox presents a different host key, so a stale connection attempt fails
rather than silently reaching a different machine.
See interactive access for the command forms,
what a session may and may not do, and the current filesystem limitation.
Sandbox sources and snapshots
Every sandbox starts from one source: an unmodified OCI image (the platform default image when the create names none) or a snapshot. Snapshots capture disk state, report truthful durability (local until remote replication is confirmed, then
replicated), and record lineage so branched sandboxes stay attributable to their common
ancestor. The model is covered in snapshots and branching.
Credentials
No hiloop-managed credential is injected into a sandbox. Registered secrets remain write-only, envelope-encrypted control-plane data, and a deployment without the complete proof-bound release path refuses bindings at admission (see managing secrets). The approved model gateway target uses an external Envoy data plane plus a Hiloop control service to validate workload proof and select the authorized credential outside the guest. That sandbox path is not deployed today. Direct provider access is not a supported fallback, so clean sandbox model access remains unavailable.Hosted and self-managed
Both deployment styles install the same charts and run the same contract; what changes is ownership:
See deployment models and the Helm install guide.