Vault install
Install Sieve Vault, the self-hosted Sieve container, in your own Kubernetes cluster. Air-gapped, signed images, offline licence.
Vault runs Sieve models inside your own cloud account or data centre. Your content, logs and metrics never leave your environment. Vault makes no outbound calls: no telemetry, no licence server, no usage upload. It serves the same System One and /v1/decisions API as the hosted service.
What you receive
A bundle sieve-vault-<version>/ with:
| File | What it is |
|---|---|
images/gateway.tar, images/engine.tar | The two container images (Docker archives) |
chart/ | The Helm chart, sieve-vault |
sbom/ | A software bill of materials for each image, in SPDX and CycloneDX |
cosign.pub | Our public signing key. Compare its fingerprint with the one in your contract. |
SHA256SUMS, SHA256SUMS.sig | Checksums of every file, and our signature over them |
INSTALL.md | This guide, as a file |
Separately you receive your licence file licence.json and the model weights archive.
Before you start
- Kubernetes 1.27 or newer with the NVIDIA device plugin, and a private container registry.
kubectl,helm3.12 or newer,cosign2 or newer (used offline), andsha256sum.- A GPU large enough for your model. From the model cards: Sieve-31B needs about 83 GB in bf16; Sieve-27B-v2 about 52 GB; Sieve-4B about 10 GB. For other models, ask us for sizing.
- A namespace with the
restrictedPod Security level:
kubectl label ns sieve pod-security.kubernetes.io/enforce=restrictedVerify the bundle offline
sha256sum -c SHA256SUMS
cosign verify-blob --key cosign.pub --signature SHA256SUMS.sig SHA256SUMSThe first command checks integrity of every file. The second checks that we signed the list. Confirm the key fingerprint out of band.
Load the images and verify their signatures
docker load -i images/gateway.tar && docker load -i images/engine.tar
# tag and push to your registry as registry.corp/sieve-vault-gateway:<version> and ...-engine:<version>
cosign verify --key cosign.pub --offline --insecure-ignore-tlog \
registry.corp/sieve-vault-gateway@sha256:<digest>Transparency-log checks need internet, so offline verification trusts the key. SBOMs are in sbom/. Build provenance (SLSA) is attached as an attestation: cosign verify-attestation --key cosign.pub --type slsaprovenance .... Pin the digests in your values file under image.*.digest.
Weights, licence and secrets
# Models PVC: populate from the weights archive, then mount read-only. LoRA adapters likewise.
kubectl -n sieve create secret generic sieve-licence --from-file=licence.json
kubectl -n sieve create secret generic sieve-api-keys --from-file=keys.json # hashed keys, auth.mode=static
kubectl -n sieve create secret tls sieve-tls --cert=tls.crt --key=tls.key # optional; required for mTLSFor customer-managed keys, use a storage class on your own KMS or HSM key for the volumes. Vault holds no encryption key of its own.
Install the chart
helm install vault ./chart -n sieve -f my-values.yamlThe smallest values file sets:
| Value | Meaning |
|---|---|
environmentId | Must equal the environment ID in your licence |
models[] | The models to load, each with its base-model licence text (the files ship in the image under /licenses) |
networkPolicy.ingressFrom | Who may call the gateway |
auth.mode | static (hashed keys in a Secret), oidc or mtls |
The chart refuses to render if the environment ID, a base-model licence for each model, or a consistent auth and TLS setup is missing.
Verify the install
kubectl -n sieve logs deploy/vault-sieve-vault -c licence-check # expect: OK L-... status=valid
kubectl -n sieve rollout status deploy/vault-sieve-vault
curl -sk https://<service>/healthz
curl -sk -H "Authorization: Bearer <key>" https://<service>/v1/modelsLicence errors
The licence-check init container reads the licence before anything starts. The pod stays in Init until the problem is fixed. Pods that are already running keep serving until they restart, plus the grace period you set in licence.graceDays (default 0).
| Error | Meaning |
|---|---|
expired | The licence term has ended |
not_yet_valid | The start date is in the future |
wrong_environment | The licence is for a different environmentId |
unknown_key_id | The image is too old for this licence. Install the newer image. |
bad_signature | The licence file was changed or damaged |
model_not_licensed | A model in models[] is not in the licence |
adapter_not_licensed | An adapter is not in the licence |
While the gateway runs it re-checks the licence every hour. If the licence becomes invalid, every route returns 503 licence_invalid and /readyz fails.
Renewal and key rotation
To renew, replace the Secret with the new licence.json and run kubectl rollout restart. Images embed two public keys. Roughly every two to three years we ship an image with the new key in the second slot while licences are still signed with the old one, so there is no cut-over day.
Network posture
The chart installs a default-deny NetworkPolicy with no egress at all, not even DNS. With auth.mode=oidc, give the chart a jwksConfigMap to stay fully offline; otherwise add one networkPolicy.egress rule to your identity provider only. Logs and the per-decision audit log stay in your cluster. See Assurance.
What reaches Sieve
Nothing. Vault sends no content, logs, metrics or usage counts to Sieve. Sieve does not see your content or logs.
Related
- Self-hosting
- Data retention
- Model cards
- Upgrades, support and calibration checks: agreed in your Vault contract. Write to support@sthanika.ai.
Next steps
Last updated