Quickstart — celda autohospedada
Levanta una celda de OpenDome que sirve la API OSL, sin control-plane y sin phone-home. Este es el camino del self-hoster; el producto gestionado/Enterprise añade el control-plane central y la consola sobre exactamente los mismos charts.
Requisitos
Sección titulada «Requisitos»- Un clúster de Kubernetes (kind sirve) con:
- Un CNI que aplique
NetworkPolicy— se recomienda Cilium. El kindnet por defecto de kind no lo aplica. Con Cilium, instálalo con--set 'policyCIDRMatchMode={nodes}'; sin eso, Cilium ignora las reglasipBlockque cubren las IPs de nodo/apiserver y el Postgres bundled se queda bloqueado en “Setting up primary”. (scripts/cluster-create.shlo hace por ti en kind.) - Un controlador Ingress para alcanzar la API OSL.
- Una StorageClass por defecto (para los PVC del object store + Postgres bundled).
- El operador CloudNativePG instalado cluster-wide — solo si usas el Postgres bundled.
- Un CNI que aplique
helm≥ 3.12 ykubectl.
Para ingress-nginx, instálalo eliminando cualquier X-Actor-Roles que envíe el
cliente en el edge (defensa en profundidad — el motor ignora ese header en
standalone de todas formas):
helm install ingress-nginx ingress-nginx/ingress-nginx \ -n ingress-nginx --create-namespace --version 4.11.3 \ --set-string 'controller.proxySetHeaders.X-Actor-Roles='Si usas el Postgres bundled, instala antes CloudNativePG:
helm install cnpg cnpg/cloudnative-pg \ -n cnpg-system --create-namespace --version 0.27.1Levantar la celda
Sección titulada «Levantar la celda»-
El shell de la celda + infra bundled (object store + Postgres).
standard-tenantcrea el namespace, unaNetworkPolicydeny-all (sin reglas allow al control-plane), las quotas y — en el perfil standalone — un object store in-namespace (RustFS) y un Postgres CloudNativePG, más el Secrettenant-object-storage.Ventana de terminal # La NetworkPolicy deny-all solo deja a los pods alcanzar la API de Kubernetes# a través de este allowlist (el init de CNPG lo necesita). Deriva ambas# direcciones de TU clúster — sin adivinar por distro:APISERVER_VIP=$(kubectl get svc kubernetes -o jsonpath='{.spec.clusterIP}')APISERVER_EP=$(kubectl get endpoints kubernetes -o jsonpath='{.subsets[0].addresses[0].ip}')helm install demo charts/standard-tenant \-n tenant-demo --create-namespace \--set tenant=demo \--set "apiServerEgress.cidrs[0]=$APISERVER_VIP/32" \--set "apiServerEgress.endpointCidrs[0]=$APISERVER_EP/32"Sin valores explícitos, el chart genera credenciales aleatorias en la primera instalación y las reutiliza en los upgrades. Recupéralas cuando quieras:
Ventana de terminal kubectl -n tenant-demo get secret tenant-object-storage -o jsonpath='{.data.accessKey}' | base64 -dkubectl -n tenant-demo get secret postgres-postgresql -o jsonpath='{.data.password}' | base64 -d -
El motor OSL — la superficie de consumo.
Ventana de terminal helm install osl charts/tenant-semantic-api \-n tenant-demo \--set tenant.id=demo \--set ingress.host=osl.tenant-demo.127.0.0.1.nip.ioEsto habilita el Ingress opt-in y renderiza el manifest OSL localmente desde los values. En el perfil standalone el motor no confía en el header
X-Actor-Roles— un llamante por un Ingress público no puede falsear roles. El acceso con ACL pasa por el emisor de tokens local: el chart genera un Secret de firma y el motor valida tokensAuthorization: BearerHS256. -
Verifica que la celda es usable vía su API — sin control-plane.
Ventana de terminal HOST=osl.tenant-demo.127.0.0.1.nip.iocurl -fsS "http://$HOST/health" # {"status":"ok",...}curl -fsS "http://$HOST/osl/conformance" # motor + niveles de conformanciacurl -fsS "http://$HOST/osl/schema" # manifest compilado (vacío hasta autorar facets) -
Emite un token firmado localmente y haz una llamada gobernada.
Los roles del token gobiernan la ACL — los facets los honran server-side.
Ventana de terminal TOKEN=$(scripts/osl-token.sh demo --roles analyst)curl -fsS -H "Authorization: Bearer $TOKEN" "http://$HOST/osl/schema"
Si eso devuelve 200 sin que exista el namespace opendome-system, la celda es
usable en standalone. Corre scripts/oss-gate.sh para afirmarlo de extremo a
extremo.
Capas opcionales
Sección titulada «Capas opcionales»- Pierna estructurada (Trino + Nessie + Iceberg) —
charts/lakehouse. Por defecto endpoints in-namespace con credenciales del Secrettenant-object-storage; necesita el Postgres bundled/externo del paso 1. - API de Config (allowlist / pipeline / discovery) —
charts/tenant-config. Ya standalone: usa el propio Postgres de la celda + una API directaGET/PUT /config/{key}. - Ingest / orquestación —
charts/dagster. Por defecto: sin callbacks al control-plane, sin telemetría upstream, los Jobs corren en este namespace.
Cargar datos reales
Sección titulada «Cargar datos reales»Para servir retrievals reales: crea el bucket (tenant-demo) en tu object store,
autora facets OSL (YAML UnstructuredFacet / JointEntity bajo
manifest.facets del motor) e ingesta datasets Lance a s3://tenant-demo/lance.
Ver Conceptos para el modelo del manifest y la
referencia de la API para cómo se llama al retrieval.