Skip to documentation
API + guides

01Documentation

Configuration

This page explains how to think about Sandbox0Infra configuration and includes a generated field reference sourced from the operator CRD.

The goal is to keep the page readable for operators while still exposing the full supported config surface.

How to Read Sandbox0Infra#

A Sandbox0Infra spec is easier to reason about when you split it into six layers:

LayerMain fieldsWhat it controls
Platform releaseinfra-operator chart / image versionWhich sandbox0 component version to deploy
Core dependenciesspec.database, spec.metadataDatabase, spec.storage, spec.redis, spec.registryPostgreSQL, s0fs metadata, object storage, gateway rate-limit Redis, registry integration
Topologyspec.services.*, spec.controlPlane, spec.cluster, spec.regionSingle-cluster vs multi-cluster shape and service placement
Data-plane runtimesspec.storage.runtime, spec.network, spec.sandboxNodePlacementManager storage behavior and node-local ctld networking and placement
Public routingspec.publicExposure, spec.internalAuthPublic sandbox URLs and inter-service trust
Runtime bootstrapspec.builtinTemplates, spec.initUserDefault templates, warm pools, initial admin bootstrap
  1. Pick your topology with spec.services.*.
  2. Decide whether database/storage/Redis/registry stay builtin or move external.
  3. Configure public exposure and cluster identity.
  4. Seed templates and initial admin user.
  5. Only then tune service and data-plane runtime configuration.

spec.initUser is consumed by the gateway runtime, not created by the operator itself. In local-password mode it bootstraps the first admin credentials; in OIDC-only mode it pre-creates the admin user and initial team so the first OIDC login with the same email lands on the intended admin account.

When spec.builtinTemplates is omitted, infra-operator seeds public builtin templates for default, openclaw, hermes, browser, and coding-agent. Set spec.builtinTemplates explicitly when you want to pin images, adjust pools, disable one of the builtins, or provide a full template spec for a runtime-specific setup. Set it to [] to remove all operator-managed builtin templates.

Pin Builtin Images for Predictable Startup#

The self-hosted openclaw, hermes, and browser presets use upstream mutable latest tags by default. Sandbox0 sets the effective main-container pull policy to IfNotPresent unless a system template overrides it. A claim on a node that already has the image does not download it again, but a new or cache-miss node resolves the tag and pulls the current image. That pull can add substantial cold-start latency for large images, and different nodes can keep different digests for the same mutable tag.

For production self-hosted deployments, replace the complete builtin template list and pin each mutable image to a reviewed digest:

yaml
spec: builtinTemplates: - templateId: default - templateId: openclaw image: ghcr.io/openclaw/openclaw@sha256:<openclaw-digest> - templateId: hermes image: nousresearch/hermes-agent@sha256:<hermes-digest> - templateId: browser image: ghcr.io/steel-dev/steel-browser@sha256:<browser-digest>

spec.builtinTemplates has replacement semantics, so omitting an entry removes that operator-managed builtin. A version tag is easier to read than a digest but remains mutable if its publisher retags it. A digest is the immutable choice.

Pinning makes the runtime version deterministic; it does not eliminate the first pull on an empty node. If image-pull latency is part of your cold-start budget, preload the pinned digests into node images or use a node-level pre-puller before admitting sandbox workloads.

Sandbox0 Cloud handles the mutable-tag policy at the platform layer: managed-region configuration pins these images by digest and rolls upstream digest changes through deployment automation. Cloud users therefore do not maintain these pins themselves. A genuinely cold node can still need a missing pinned image, but cache and prewarming operations remain the managed platform's responsibility rather than part of the customer template configuration.

Supported Topologies#

TopologyTypical fieldsUse when
Single-cluster fullmodestorage, network, registry, services.clusterGateway, services.managerYou deploy one complete data-plane cluster
Multi-cluster control planeservices.regionalGateway, services.schedulerYou coordinate multiple data-plane clusters in one region
Multi-cluster data planecontrolPlane, cluster, storage, network, services.clusterGateway, services.managerYou attach a complete data-plane cluster to an external control plane

The single-cluster sample is always fullmode. manager hosts lifecycle control and the storage API runtime. Each sandbox node runs the ctld-a and ctld-b DaemonSets; the elected primary owns rootfs persistence, volume portals, and the network runtime, and the synchronized standby takes over after promotion. Configure storage behavior under spec.storage.runtime, network behavior under spec.network, and shared sandbox-node placement under spec.sandboxNodePlacement.

Sandbox Claim Admission#

Team Quota is the claim admission boundary. The sandbox_claims rate policy controls sustained claim rate and immediate burst at the external regional or full-mode gateway, while active_sandboxes limits the number of running sandboxes for a team. Manager does not maintain a separate cluster-wide claim-start budget.

After quota admission, manager claims a ready idle pod or creates a cold pod directly. Warm-pool ReplicaSets also scale directly to each template's configured minIdle. In multi-cluster mode, scheduler routing prefers ready idle capacity, then estimated cluster headroom, configured weight, and deterministic fallback order.

Metering Boundary#

Metering is disabled by default. Set spec.metering.enabled: true and configure spec.clickHouse.type as builtin or external to enable the region usage ledger.

ComponentResponsibility
PostgreSQLTransactional producer state and an ordered delivery outbox; storage mutations enqueue usage in the same business transaction
Manager projectorRetries the oldest stable, idempotent operation batch until ClickHouse accepts it
ClickHouseLong-term usage ledger and the only metering query and export backend
Billing systemConsumes exported windows and watermarks, then applies pricing outside the open-source data plane

Metering export is eventually consistent:

ProducerNormal additional delay
Manager lifecycle and storage mutationsProjector poll, about two seconds
ctld network byte windowsmeteringReportInterval, 10 seconds by default
Periodic storage byte-hour windowsUp to one minute

A ClickHouse outage increases the delay without discarding committed outbox operations. After projection-state bootstrap, producers can also restart while ClickHouse is unavailable.

Export and upgrade rules:

  • complete_before is the greatest globally ordered producer watermark delivered to ClickHouse; every older committed batch has also been delivered
  • new rows expose their PostgreSQL outbox sequence; rows created before that column use sequence: 0
  • cursor pagination is the canonical export contract across upgrades
  • signed Unix nanosecond timestamps preserve DateTime64(9) boundaries and cursor precision

Monitor manager_metering_outbox_pending_operations and manager_metering_outbox_oldest_pending_age_seconds for delivery backlog.

Sandbox compute uses a serverless-style contract:

Window typeUnitMeaning
sandbox.runtime_mib_millisecondsmib_millisecondsActive sandbox runtime and team-owned warm pool runtime multiplied by allocated memory
sandbox.egress_bytesbytesEgress traffic observed by the ctld network runtime
sandbox.ingress_bytesbytesIngress traffic observed by the ctld network runtime
sandbox.volume_byte_hoursbyte_hoursPersisted volume and volume snapshot storage over time. Snapshot rows keep subject_type=snapshot
sandbox.rootfs_byte_hoursbyte_hoursPersisted sandbox rootfs COW object storage over time
sandbox.object_store_get_requestscountSuccessful GetRequest-class OSS HTTP attempts for platform-owned volume and rootfs storage
sandbox.object_store_put_requestscountSuccessful PutRequest-class OSS HTTP attempts for platform-owned volume and rootfs storage, including ListObjectsV2

Public template idle pools are platform cost. Team-owned template warm pools are attributed to the owning team with subject_type=template.

Object-store request windows are usage facts; Sandbox0 does not attach prices.

  • manager and ctld aggregate provider HTTP attempts for one minute before writing them to the PostgreSQL outbox
  • volume requests are attributed from sandboxvolumes/<team_id>/<volume_id>
  • rootfs requests are attributed from sandbox-rootfs/<team_id>/<sandbox_id>
  • window data records provider, bucket, billing_item, operation, cost_scope, and prefix_class
  • requests to customer-owned external S3 volumes are excluded

Reconcile these windows with provider access and metering logs before using them for cost reporting.

Platform Observability#

Sandbox0 separates three data paths:

Data pathConfigurationPurpose
Platform telemetryspec.observabilityExport service logs, metrics, and traces to your observability stack
Per-sandbox historyspec.clickHouse, spec.sandboxObservabilityRetain sandbox metrics, logs, and signed audit events
Meteringspec.clickHouse, spec.meteringMaintain usage truth and region-scoped exports

See Self-hosted Observability for collector setup, ClickHouse examples, audit persistence, retention, key management, and monitoring. See Sandbox Observability for the user-facing query and watch APIs.

For cold-start diagnosis, collect manager_pod_lifecycle_stage_duration_seconds. Use kubelet kubelet_runtime_operations_duration_seconds{operation_type=~"run_podsandbox|create_container|start_container"} when you need individual CRI operation latency.

What Usually Changes First#

External PostgreSQL#

Move spec.database.type from builtin to external when you want managed PostgreSQL durability, backup policy, and operational separation.

yaml
spec: database: type: external external: host: your-db.rds.amazonaws.com port: 5432 database: sandbox0 username: sandbox0 passwordSecret: name: db-credentials key: password

S3 or OSS Backing Storage#

Configure the object-storage backend and manager storage runtime together under spec.storage.

yaml
spec: storage: type: s3 s3: bucket: sandbox0-prod region: us-east-1 endpoint: https://s3.amazonaws.com credentialsSecret: name: aws-credentials accessKeyKey: accessKeyId secretKeyKey: secretAccessKey runtime: objectEncryptionEnabled: true

Sandbox RuntimeClass#

Use services.manager.config.sandboxRuntimeClassName when sandbox Pods should run with a non-default runtime such as runc, gvisor, or a custom gvisor-rootfs handler.

yaml
spec: services: manager: config: sandboxRuntimeClassName: gvisor-rootfs

This field only controls the runtimeClassName written onto sandbox Pods. The named Kubernetes RuntimeClass must already exist, and its handler must already be configured in the node CRI runtime on every eligible sandbox node.

infra-operator does not install node runtime handlers. It does not install runsc, write /etc/containerd/config.toml, restart containerd, or create a gvisor-rootfs handler. Do that through your node image, node bootstrap automation, or a dedicated privileged node setup process before scheduling sandbox workloads there.

Procd Binary Image Volume#

Sandbox Pods mount Sandbox0 procd binaries from a small OCI artifact image at /procd-image by default. This avoids a per-Pod init container on the sandbox startup path.

When procdBinImageRef is omitted, infra-operator derives it from the deployed infra image tag by appending -procd-bin. For example, sandbox0ai/infra:v0.8.0 uses sandbox0ai/infra:v0.8.0-procd-bin.

Set procdBinImageRef only when you publish the procd binary artifact image separately:

yaml
spec: services: manager: config: procdBinImageRef: registry.example.com/sandbox0/procd-bin:v0.8.0

Kubernetes image volume support is part of the Sandbox0 cluster baseline. Unsupported runtimes fail sandbox Pod startup instead of falling back inside the Pod. Sandbox0 mounts the whole image volume and starts /procd-image/usr/local/bin/procd, so clusters do not need container-runtime support for image volume subPath.

Sandbox Memory Limits#

Sandbox claims and runtime updates can set config.resources.memory. The minimum accepted value is 128Mi. The platform maximum defaults to 32Gi. Manager derives CPU from the configured memory-per-CPU ratio and enforces a minimum CPU limit of 150m for claimed sandboxes.

The minimum applies when a sandbox is claimed, resumed, or resized. Upgrading manager does not resize sandbox pods that were already running before the upgrade.

Use services.manager.config.sandboxMaxMemory to lower or raise the platform maximum:

yaml
spec: services: manager: config: sandboxMaxMemory: 16Gi

Sandbox0 derives CPU from memory using services.manager.config.teamTemplateMemoryPerCpu, so callers do not set CPU directly on a sandbox claim or update.

For gVisor rootfs checkpoint and restore support on self-managed clusters, use a dedicated containerd handler that points to runsc with shared file access and overlay disabled, then create a matching RuntimeClass:

toml
# /etc/containerd/config.toml version = 2 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.gvisor-rootfs] runtime_type = "io.containerd.runsc.v1" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.gvisor-rootfs.options] TypeUrl = "io.containerd.runsc.v1.options" ConfigPath = "/etc/containerd/runsc-rootfs.toml"
toml
# /etc/containerd/runsc-rootfs.toml [runsc_config] overlay2 = "none" file-access = "shared"
yaml
apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: gvisor-rootfs handler: gvisor-rootfs

sandboxRuntimeClassName applies only to sandbox Pods. Ctld is a node-local host component and must use a runtime that supports its required hostNetwork, hostPath, FUSE, and network-programming access; do not run ctld under gvisor, gvisor-rootfs, or kata.

ctld assumes the node's containerd data root is /var/lib/containerd by default. If your nodes move containerd data to another host path, configure the same path so rootfs pause/resume can use the overlayfs fast path:

yaml
spec: services: ctld: containerdHostDataRoot: /var/lib/containerd/sandbox0

ctld also keeps a disposable node-local rootfs object cache under its host data directory. This cache accelerates pause/resume when the restoring ctld already has the needed rootfs layer objects. The default cap is 20Gi per ctld node. Set rootfsObjectCacheMaxBytes: "0" to disable it, or tune the GC fields to fit your node disk:

yaml
spec: services: ctld: rootfsObjectCacheMaxBytes: 20Gi rootfsObjectCacheMinFreeBytes: 5Gi rootfsObjectCacheMaxAge: 24h rootfsObjectCacheSweepInterval: 1m

Cache contents are safe to delete. If a cached object is missing, corrupt, too old, or evicted to preserve free space, ctld downloads the rootfs object from configured object storage.

Shared Redis Rate Limiting#

Gateway request rate limiting defaults to process-local memory. Configure spec.redis so api_requests and network bandwidth Team Quotas share admission state across gateway replicas, ctld nodes, and data-plane clusters in the region.

yaml
spec: redis: type: builtin builtin: enabled: true

For an external Redis instance, store the URL in a Secret and reference it from spec.redis.

yaml
apiVersion: v1 kind: Secret metadata: name: redis-url namespace: sandbox0-system stringData: url: rediss://:[email protected]:6379/0 --- apiVersion: infra.sandbox0.ai/v1alpha1 kind: Sandbox0Infra metadata: name: fullmode namespace: sandbox0-system spec: redis: type: external external: urlSecret: name: redis-url key: url keyPrefix: sandbox0:ratelimit:prod operationTimeout: 100ms failOpen: true

Credential Source Storage#

Credential sources are stored in encrypted PostgreSQL by default. infra-operator creates and mounts a stable per-installation encryption key for manager. During upgrade, legacy plaintext rows remain readable and are not rewritten automatically.

Configure spec.credentialVault when new credential source material should live in a Vault-compatible backend. Builtin mode installs OpenBao:

yaml
spec: credentialVault: type: builtin builtin: enabled: true mount: secret

External mode connects manager to an existing HashiCorp Vault-compatible endpoint:

yaml
apiVersion: v1 kind: Secret metadata: name: sandbox0-vault-token namespace: sandbox0-system stringData: token: <vault-token> --- apiVersion: infra.sandbox0.ai/v1alpha1 kind: Sandbox0Infra metadata: name: fullmode namespace: sandbox0-system spec: credentialVault: type: external external: address: https://vault.example.com tokenSecret: name: sandbox0-vault-token key: token mount: secret allowedPathPrefixes: - sandbox0/credential-sources/{{teamID}}/

When spec.credentialVault is enabled, manager stores newly written credential sources in the configured Vault backend. Existing rows keep their recorded storage backend.

Egress Auth Resolve TTL#

The ctld network runtime caches resolved egress auth material until the expiresAt timestamp returned by manager. Manager does not keep an additional resolved-material cache. Credential source rotation actively invalidates affected ctld cache entries, so already-claimed sandboxes normally use the rotated source on their next matching egress resolve. The default lifetime is 5 minutes, and the TTL remains the fallback consistency bound if realtime invalidation delivery is interrupted.

Set spec.services.manager.config.egressAuthDefaultResolveTtl when you want a different platform default. Individual bindings can override it with network.credentialBindings[*].cachePolicy.ttl.

yaml
spec: services: manager: config: egressAuthDefaultResolveTtl: 1m

Public Routing and Region Identity#

spec.publicExposure decides the public host pattern used for sandbox URLs. Keep it consistent with your region and DNS plan.

yaml
spec: publicExposure: enabled: true rootDomain: sandbox0.example.com regionId: aws-us-east-1

SSH Gateway#

Enable spec.services.sshGateway when you want a region-scoped SSH entrypoint that bridges standard ssh and scp clients into sandbox procd sessions.

The routing model is intentionally simple:

  • One ssh-gateway per region
  • One fixed DNS-only host or TCP proxy address per region, for example aws-us-east-1.ssh.sandbox0.app
  • SSH username is the target sandbox ID
  • User authentication uses SSH public keys uploaded to the gateway API

In Kubernetes terms, spec.services.sshGateway.service.port is the Kubernetes Service port and spec.services.sshGateway.config.sshPort is the container listen port. You usually keep the internal port at 2222 and expose 22 or a NodePort externally.

When an external load balancer listens on a different public port than the Kubernetes Service or NodePort, set spec.services.sshGateway.endpointPort to the public port that clients should use.

The operator also manages a persistent Ed25519 host key Secret for the service. As long as that Secret is retained, clients continue to see the same SSH host identity across pod restarts.

yaml
spec: services: sshGateway: enabled: true replicas: 1 service: type: LoadBalancer port: 22 config: sshPort: 2222

For local labs or kind-style environments, a NodePort is often simpler:

yaml
spec: services: sshGateway: enabled: true replicas: 1 service: type: NodePort port: 30222 endpointPort: 22

After exposing the service through DNS or a load balancer, users can upload SSH public keys with POST /users/me/ssh-keys and connect with standard clients. See SSH for the user-facing flow.

AWS LoadBalancer TLS#

When you expose regionalGateway or globalGateway through a cloud load balancer instead of Kubernetes Ingress, declare provider-specific Service annotations under spec.services.<service>.service.annotations. On AWS, this is the supported place to attach ACM certificates and choose the load balancer mode.

Also set spec.services.<service>.config.baseUrl to the final browser-facing URL. That keeps auth callbacks, generated links, and projected status endpoints aligned with the hostname you put behind Cloudflare.

yaml
spec: services: regionalGateway: enabled: true service: type: LoadBalancer port: 443 annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <acm-certificate-arn> service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443" config: baseUrl: https://your-gateway.example.com

Multi-Cluster Data Plane Registration#

Data-plane clusters need control-plane connection details and a stable cluster identity.

yaml
spec: controlPlane: url: https://api.sandbox0.example.com internalAuthPublicKeySecret: name: control-plane-public-key key: public.key cluster: id: cluster-001 name: production-use1-a services: clusterGateway: enabled: true config: authMode: internal manager: enabled: true

Service and Runtime Config#

Use spec.services.<service>.config for deployable services, spec.storage.runtime for manager storage behavior, and spec.network.config for the network runtime in ctld.

Examples:

  • services.clusterGateway.config.authMode switches between public, internal, and both
  • services.manager.config.autoscaler.* controls warm-pool scaling behavior
  • services.manager.config.k8sClientQps and k8sClientBurst tune the manager Kubernetes client token bucket rate limit; defaults are 50 and 100
  • services.manager.config.sandboxMaxMemory caps per-sandbox memory overrides; the default is 32Gi
  • services.manager.config.procdBinImageRef overrides the derived procd artifact image used by sandbox Pods
  • services.manager.config.allowColdStartWithoutReadyDataPlane lets cold claims create Pending pods for external node autoscaler scale-from-zero deployments; keep it disabled unless the cluster autoscaler can provision matching sandbox nodes
  • services.manager.config.autoscalerSafeToEvictAnnotationKeys lists the platform autoscaler's pod annotation keys; manager writes true on idle pods and false on claimed pods without embedding a vendor-specific key
  • services.manager.config.podTeardown.* bounds warm-pool rollout and repair work per node and across the cluster
  • storage.runtime.filesystem* tunes the manager storage runtime; services.manager.config.procdConfig.volume* tunes mounted volume cache sizing
  • storage.runtime.s0fsSegmentTargetSize sets the target S0FS segment size for materialized volume data; the default is 4Mi
  • storage.runtime.s0fsStateFormatVersion selects the format used for new S0FS state writes; readers accept versions 1 and 2, and the default remains 1
  • storage.runtime.s0fsHotCacheMaxSize bounds the conservatively estimated memory used by clean node-local S0FS engines retained after an intentional pause; the cache has no age-based expiry, uses probation/protected admission to resist short-lived churn, defaults to 1Gi, and is disabled by setting the value to 0
  • storage.runtime.s0fsCompaction* tunes background S0FS compaction for RWO volume owners; s0fsCompactionInterval accepts 0, off, or disabled to turn it off
  • storage.runtime.cacheSizeLimit and logSizeLimit cap storage cache and logs in the manager Pod; volumePortalCacheSizeLimit and volumePortalRootMinFree tune the volume portals used by ctld
  • storage.runtime.objectEncryptionEnabled controls application-layer encryption for persisted rootfs checkpoint objects, S0FS Volume objects, and node-local S0FS volume cache files; it is enabled by default
  • network.config.egressBandwidthBytesPerSecond, ingressBandwidthBytesPerSecond, and bandwidthBurstBytes apply per-sandbox bandwidth throttling when set above zero
  • services.manager.config.defaultTeamQuotas configures region-wide capacity, API request, and network bandwidth defaults; see Team Quotas
  • network.config.* also controls proxy ports, policy enforcement, and node-level networking behavior

For autoscaled sandbox node pools, configure the annotation contract and teardown budgets together:

yaml
spec: services: manager: config: autoscalerSafeToEvictAnnotationKeys: - cluster-autoscaler.kubernetes.io/safe-to-evict podTeardown: maxConcurrentPerNode: 4 maxConcurrentPerDegradedNode: 1 maxConcurrentReplacements: 40

maxConcurrentPerNode is applied independently to each healthy node, so cleanup can progress in parallel across nodes. A Ready node reporting memory, disk, PID, or network pressure uses maxConcurrentPerDegradedNode. Manager starts no new teardown on a NotReady or Unknown node, but stale force-deletes still make bounded progress with the degraded-node limit. All templates and cleanup paths share the same cluster-wide replacement budget.

Manager also creates a PodDisruptionBudget for each idle pool. It protects ready capacity from autoscalers that use the Eviction API, while the node-aware manager budget controls direct rollout and repair deletes.

Monitor the S0FS resume cache with ctld_s0fs_hot_cache_requests_total, ctld_s0fs_hot_cache_admissions_total, ctld_s0fs_hot_cache_evictions_total, and the entry, estimated-byte, segment, and budget gauges under the ctld_s0fs_hot_cache_ prefix. Admission and segment labels are intentionally low-cardinality; sandbox and volume IDs appear only in structured logs.

S0FS State Format Rollout#

Treat S0FS state format 2 as a two-phase rollout. First deploy the dual-reader build to every manager and both ctld DaemonSets while leaving s0fsStateFormatVersion: 1. After every old reader is gone, set the field to 2. Once any committed head or snapshot has been written as version 2, roll back only to a build that can read both versions; changing the field back to 1 changes future writes but does not rewrite existing version 2 objects.

yaml
spec: redis: type: builtin builtin: enabled: true storage: runtime: cacheSizeLimit: 20Gi logSizeLimit: 1Gi s0fsSegmentTargetSize: 4Mi s0fsStateFormatVersion: 1 s0fsHotCacheMaxSize: 1Gi s0fsCompactionInterval: 1m s0fsCompactionMinDeadRatio: "0.5" s0fsCompactionMinReclaimSize: 1Mi volumePortalCacheSizeLimit: 20Gi volumePortalRootMinFree: 5Gi network: config: egressBandwidthBytesPerSecond: 10485760 ingressBandwidthBytesPerSecond: 10485760 bandwidthBurstBytes: 10485760 services: manager: config: defaultTeamQuotas: - dimension: network_egress_bytes limitValue: 104857600 intervalMs: 1000 burstValue: 104857600 - dimension: network_ingress_bytes limitValue: 104857600 intervalMs: 1000 burstValue: 104857600

Use spec.sandboxNodePlacement.nodeSelector and tolerations for the hard placement shared by sandbox template Pods and the ctld HA pair. infra-operator owns sandbox0.ai/data-plane-ready and adds it to sandbox Pod placement after the required node-local components are Ready.

preferredNodeSelector is different: it is a soft preference used only for manager-created sandbox Pods. The manager also uses the same selector when a hot claim chooses among already scheduled idle Pods. This lets a fixed-capacity pool absorb claims first while preserving an autoscaled pool as fallback:

yaml
spec: sandboxNodePlacement: nodeSelector: sandbox0.ai/node-role: sandbox preferredNodeSelector: sandbox0.ai/capacity-type: fixed tolerations: - key: sandbox0.ai/sandbox operator: Equal value: "true" effect: NoSchedule

Do not put a fallback capacity label such as sandbox0.ai/capacity-type: fixed in nodeSelector; that would turn the preference into a hard requirement and prevent scheduling onto burst nodes.

ℹ

Use the generated reference below for exact field names, defaults, enums, and required flags. Use the sample manifests for operator-friendly starting points.

ℹ

Not every operational rule is expressible in CRD schema. Some defaults are applied inside manager and ctld, and some validations are conditional. Examples include network runtime defaults and storage encryption requiring a key path.

Full Reference#

The reference below is generated from the Sandbox0Infra CRD schema produced by controller-gen, not manually maintained MDX.

This reference is generated from the `Sandbox0Infra` CRD schema. It stays aligned with defaults, enums, and required fields exposed by the operator, while deployment guidance on this page remains curated.

Database
spec.database
21 fields

Database configures the main database for sandbox0

FieldTypeRequiredDefaultDescription
spec.databaseobjectNo-Database configures the main database for sandbox0
spec.database.builtinobjectNo-Builtin configures the built-in single-node PostgreSQL
spec.database.builtin.databasestringNosandbox0Database specifies the database name
spec.database.builtin.enabledbooleanNotrueEnabled enables the built-in database
spec.database.builtin.imagestringNopostgres:16-alpineImage specifies the postgres image for the builtin database
spec.database.builtin.persistenceobjectNo-Persistence configures database storage
spec.database.builtin.persistence.sizeinteger|stringNo20GiSize specifies the storage size
spec.database.builtin.persistence.storageClassstringNo-StorageClass specifies the storage class (empty for default)
spec.database.builtin.portintegerNo5432Port specifies the database port
spec.database.builtin.sslModestringNodisableSSLMode specifies the SSL mode for builtin DSN
spec.database.builtin.statefulResourcePolicystringNoRetainStatefulResourcePolicy controls what happens to the builtin PVC and generated credentials secret when the builtin database is disabled or replaced by an external database. Allowed values: Retain, Delete.
spec.database.builtin.usernamestringNosandbox0Username specifies the database username
spec.database.externalobjectNo-External configures connection to external database
spec.database.external.databasestringYes-Database specifies the database name
spec.database.external.hoststringYes-Host specifies the database host
spec.database.external.passwordSecretobjectYes-PasswordSecret references the secret containing the password
spec.database.external.passwordSecret.keystringNopasswordKey is the key in the secret
spec.database.external.passwordSecret.namestringNo-Name is the name of the secret
spec.database.external.portintegerNo5432Port specifies the database port
spec.database.external.sslModestringNorequireSSLMode specifies the SSL mode for connection
spec.database.external.usernamestringYes-Username specifies the database username
spec.database.typestringNobuiltinType specifies the postgres database type: builtin, or external Allowed values: builtin, external.
Storage
spec.storage
86 fields

Storage configures the storage backend (S0FS S3 backend)

FieldTypeRequiredDefaultDescription
spec.storageobjectNo-Storage configures the storage backend (S0FS S3 backend)
spec.storage.builtinobjectNo-Builtin configures the built-in RustFS storage
spec.storage.builtin.bucketstringNosandbox0Bucket specifies the default bucket name for builtin storage
spec.storage.builtin.consoleEnabledbooleanNotrueConsoleEnabled enables the RustFS console
spec.storage.builtin.consolePortintegerNo9001ConsolePort specifies the RustFS console port
spec.storage.builtin.credentialsobjectNo-Credentials configures access credentials (auto-generated if not specified)
spec.storage.builtin.credentials.accessKeystringNo-AccessKey is the access key
spec.storage.builtin.credentials.secretKeystringNo-SecretKey is the secret key
spec.storage.builtin.enabledbooleanNotrueEnabled enables the built-in storage
spec.storage.builtin.imagestringNorustfs/rustfs:1.0.0-alpha.79Image specifies the RustFS image for builtin storage
spec.storage.builtin.obsEnvironmentstringNodevelopObsEnvironment specifies the RustFS environment label
spec.storage.builtin.obsLogDirectorystringNo/data/logsObsLogDirectory specifies the RustFS log directory
spec.storage.builtin.obsLoggerLevelstringNodebugObsLoggerLevel specifies the RustFS log level
spec.storage.builtin.persistenceobjectNo-Persistence configures storage persistence
spec.storage.builtin.persistence.sizeinteger|stringNo20GiSize specifies the storage size
spec.storage.builtin.persistence.storageClassstringNo-StorageClass specifies the storage class (empty for default)
spec.storage.builtin.portintegerNo9000Port specifies the RustFS API port
spec.storage.builtin.regionstringNous-east-1Region specifies the default region for builtin storage
spec.storage.builtin.statefulResourcePolicystringNoRetainStatefulResourcePolicy controls what happens to the builtin PVC and generated credentials secret when the builtin storage is disabled or replaced by an external storage backend. Allowed values: Retain, Delete.
spec.storage.builtin.volumesstringNo/dataVolumes specifies the RustFS data path
spec.storage.gcsobjectNo-GCS configures Google Cloud Storage using native GCS credentials.
spec.storage.gcs.bucketstringYes-Bucket specifies the GCS bucket name.
spec.storage.gcs.workloadIdentityServiceAccountEmailstringNo-WorkloadIdentityServiceAccountEmail is the Google service account email used by storage clients through GKE Workload Identity.
spec.storage.ossobjectNo-OSS configures Aliyun OSS storage
spec.storage.oss.bucketstringYes-Bucket specifies the OSS bucket name
spec.storage.oss.credentialsSecretobjectYes-CredentialsSecret references the secret containing Aliyun credentials
spec.storage.oss.credentialsSecret.accessKeyKeystringNoaccessKeyIdAccessKeyKey is the key for access key ID
spec.storage.oss.credentialsSecret.namestringYes-Name is the name of the secret
spec.storage.oss.credentialsSecret.secretKeyKeystringNoaccessKeySecretSecretKeyKey is the key for access key secret
spec.storage.oss.endpointstringYes-Endpoint specifies the OSS endpoint
spec.storage.oss.regionstringYes-Region specifies the Aliyun region
spec.storage.runtimeobjectNo-Runtime configures the sandbox volume runtime hosted by manager and ctld.
spec.storage.runtime.auditFilestringNo/var/log/storage-proxy/audit.log-
spec.storage.runtime.auditLogbooleanNotrue-
spec.storage.runtime.cacheDirstringNo/var/lib/storage-proxy/cache-
spec.storage.runtime.cacheSizeLimitstringNo20Gi-
spec.storage.runtime.cleanupIntervalstringNo60s-
spec.storage.runtime.databaseMaxConnsintegerNo30-
spec.storage.runtime.databaseMinConnsintegerNo5-
spec.storage.runtime.databaseSchemastringNostorage_proxy-
spec.storage.runtime.directVolumeFileIdleTTLstringNo30s-
spec.storage.runtime.filesystemAttrTimeoutstringNo1s-
spec.storage.runtime.filesystemBlockSizeintegerNo4096-
spec.storage.runtime.filesystemCompressionstringNolz4-
spec.storage.runtime.filesystemDirEntryTimeoutstringNo1s-
spec.storage.runtime.filesystemEntryTimeoutstringNo1s-
spec.storage.runtime.filesystemMaxUploadintegerNo20-
spec.storage.runtime.filesystemMetaRetriesintegerNo10-
spec.storage.runtime.filesystemNamestringNosandbox0-
spec.storage.runtime.filesystemTrashDaysintegerNo1-
spec.storage.runtime.flushTimeoutstringNo30s-
spec.storage.runtime.heartbeatIntervalstringNo5s-
spec.storage.runtime.heartbeatTimeoutintegerNo15-
spec.storage.runtime.httpAddrstringNo0.0.0.0-
spec.storage.runtime.httpIdleTimeoutstringNo60s-
spec.storage.runtime.httpPortintegerNo8081-
spec.storage.runtime.httpReadTimeoutstringNo15s-
spec.storage.runtime.httpWriteTimeoutstringNo15s-
spec.storage.runtime.kubeconfigPathstringNo--
spec.storage.runtime.logLevelstringNoinfo-
spec.storage.runtime.logSizeLimitstringNo1Gi-
spec.storage.runtime.metricsEnabledbooleanNotrue-
spec.storage.runtime.metricsPortintegerNo9090-
spec.storage.runtime.objectEncryptionAlgostringNoaes256gcm-rsa-
spec.storage.runtime.objectEncryptionEnabledbooleanNotrue-
spec.storage.runtime.objectEncryptionPassphrasestringNo--
spec.storage.runtime.restoreRemountTimeoutstringNo30s-
spec.storage.runtime.s0fsCompactionIntervalstringNo1m-
spec.storage.runtime.s0fsCompactionMinDeadRatiostringNo0.5-
spec.storage.runtime.s0fsCompactionMinReclaimSizestringNo1Mi-
spec.storage.runtime.s0fsHotCacheMaxSizestringNo1GiS0FSHotCacheMaxSize bounds conservatively estimated memory retained by clean engines. Engines are retained only after an intentional sandbox pause. Set 0 to disable retention.
spec.storage.runtime.s0fsSegmentTargetSizestringNo4Mi-
spec.storage.runtime.s0fsStateFormatVersionintegerNo1S0FSStateFormatVersion selects the format for new S0FS state objects and local state files. Readers accept both versions. Keep version 1 until every manager and ctld runs a dual-reader build. Allowed values: 1, 2.
spec.storage.runtime.volumePortalCacheSizeLimitstringNo20Gi-
spec.storage.runtime.volumePortalRootMinFreestringNo5Gi-
spec.storage.runtime.watchEventQueueSizeintegerNo256-
spec.storage.runtime.watchEventsEnabledbooleanNotrue-
spec.storage.s3objectNo-S3 configures S3 or S3-compatible storage
spec.storage.s3.bucketstringYes-Bucket specifies the S3 bucket name
spec.storage.s3.credentialsSecretobjectYes-CredentialsSecret references the secret containing AWS credentials
spec.storage.s3.credentialsSecret.accessKeyKeystringNoaccessKeyIdAccessKeyKey is the key for access key ID
spec.storage.s3.credentialsSecret.namestringYes-Name is the name of the secret
spec.storage.s3.credentialsSecret.secretKeyKeystringNosecretAccessKeySecretKeyKey is the key for secret access key
spec.storage.s3.endpointstringNo-Endpoint specifies the S3 endpoint (optional for AWS)
spec.storage.s3.regionstringYes-Region specifies the AWS region
spec.storage.s3.sessionTokenKeystringNo-SessionTokenKey is the key for session token in the secret (optional)
spec.storage.typestringNobuiltinType specifies the storage type: builtin, s3, oss, or gcs. Allowed values: builtin, s3, oss, gcs.
Registry
spec.registry
84 fields

Registry configures the container registry

FieldTypeRequiredDefaultDescription
spec.registryobjectNo-Registry configures the container registry
spec.registry.aliyunobjectNo-Aliyun configures Aliyun registry integration.
spec.registry.aliyun.credentialsSecretobjectYes-CredentialsSecret references Aliyun credentials for short-lived tokens.
spec.registry.aliyun.credentialsSecret.accessKeyKeystringNoaccessKeyIdAccessKeyKey is the key for access key ID.
spec.registry.aliyun.credentialsSecret.namestringYes-Name is the name of the secret.
spec.registry.aliyun.credentialsSecret.secretKeyKeystringNoaccessKeySecretSecretKeyKey is the key for secret access key.
spec.registry.aliyun.instanceIdstringYes-InstanceID specifies the ACR instance ID.
spec.registry.aliyun.pullSecretobjectYes-PullSecret references the dockerconfigjson secret to use for image pulls.
spec.registry.aliyun.pullSecret.keystringNo.dockerconfigjsonKey is the key in the secret.
spec.registry.aliyun.pullSecret.namestringYes-Name is the name of the secret.
spec.registry.aliyun.regionstringYes-Region specifies the Aliyun region.
spec.registry.aliyun.registrystringYes-Registry specifies the registry hostname.
spec.registry.awsobjectNo-AWS configures AWS registry integration.
spec.registry.aws.assumeRoleArnstringNo-AssumeRoleARN optionally scopes registry pushes through an assumed IAM role.
spec.registry.aws.credentialsSecretobjectYes-CredentialsSecret references AWS credentials for short-lived tokens.
spec.registry.aws.credentialsSecret.accessKeyKeystringNoaccessKeyIdAccessKeyKey is the key for access key ID.
spec.registry.aws.credentialsSecret.namestringYes-Name is the name of the secret.
spec.registry.aws.credentialsSecret.secretKeyKeystringNosecretAccessKeySecretKeyKey is the key for secret access key.
spec.registry.aws.credentialsSecret.sessionTokenKeystringNo-SessionTokenKey is the key for session token (optional).
spec.registry.aws.externalIdstringNo-ExternalID is passed to STS AssumeRole when assumeRoleArn is configured.
spec.registry.aws.pullSecretobjectYes-PullSecret references the dockerconfigjson secret to use for image pulls.
spec.registry.aws.pullSecret.keystringNo.dockerconfigjsonKey is the key in the secret.
spec.registry.aws.pullSecret.namestringYes-Name is the name of the secret.
spec.registry.aws.regionstringYes-Region specifies the AWS region.
spec.registry.aws.registrystringNo-Registry specifies the registry hostname.
spec.registry.aws.registryIdstringNo-RegistryID specifies the AWS account ID (optional).
spec.registry.azureobjectNo-Azure configures Azure registry integration.
spec.registry.azure.credentialsSecretobjectYes-CredentialsSecret references the client credentials for ACR.
spec.registry.azure.credentialsSecret.clientIdKeystringNoclientIdClientIDKey is the key for client ID.
spec.registry.azure.credentialsSecret.clientSecretKeystringNoclientSecretClientSecretKey is the key for client secret.
spec.registry.azure.credentialsSecret.namestringYes-Name is the name of the secret.
spec.registry.azure.credentialsSecret.tenantIdKeystringNotenantIdTenantIDKey is the key for tenant ID.
spec.registry.azure.pullSecretobjectYes-PullSecret references the dockerconfigjson secret to use for image pulls.
spec.registry.azure.pullSecret.keystringNo.dockerconfigjsonKey is the key in the secret.
spec.registry.azure.pullSecret.namestringYes-Name is the name of the secret.
spec.registry.azure.registrystringYes-Registry specifies the registry hostname.
spec.registry.builtinobjectNo-Builtin configures the built-in registry.
spec.registry.builtin.credentialsSecretobjectNo-CredentialsSecret references the secret containing registry credentials. If omitted, the operator will generate a secret named "<infra-name>-registry-credentials".
spec.registry.builtin.credentialsSecret.namestringYes-Name is the name of the secret.
spec.registry.builtin.credentialsSecret.passwordKeystringNopasswordPasswordKey is the key for password.
spec.registry.builtin.credentialsSecret.usernameKeystringNousernameUsernameKey is the key for username.
spec.registry.builtin.enabledbooleanNotrueEnabled enables the built-in registry.
spec.registry.builtin.imagestringNoregistry:2.8.3Image specifies the registry image.
spec.registry.builtin.ingressobjectNo-Ingress configures ingress settings for external registry access.
spec.registry.builtin.ingress.annotationsobjectNo-Annotations specifies provider-specific ingress annotations.
spec.registry.builtin.ingress.classNamestringNo-ClassName specifies the ingress class name
spec.registry.builtin.ingress.enabledbooleanNofalseEnabled enables ingress
spec.registry.builtin.ingress.extraHostsarray<string>No-ExtraHosts specifies additional ingress hosts routed to the same backend.
spec.registry.builtin.ingress.extraHosts[]stringNo--
spec.registry.builtin.ingress.hoststringNo-Host specifies the ingress host
spec.registry.builtin.ingress.tlsarray<object>No-TLS specifies host groups and their backing TLS secrets. When set, TLS takes precedence over TLSSecret.
spec.registry.builtin.ingress.tls[]objectNo-IngressTLSConfig defines one TLS certificate binding for ingress hosts.
spec.registry.builtin.ingress.tls[].hostsarray<string>No-Hosts specifies the hosts covered by this TLS secret.
spec.registry.builtin.ingress.tls[].hosts[]stringNo--
spec.registry.builtin.ingress.tls[].secretNamestringNo-SecretName specifies the Kubernetes TLS secret name.
spec.registry.builtin.ingress.tlsSecretstringNo-TLSSecret specifies the TLS secret name
spec.registry.builtin.persistenceobjectNo-Persistence configures registry persistence.
spec.registry.builtin.persistence.sizeinteger|stringNo20GiSize specifies the storage size
spec.registry.builtin.persistence.storageClassstringNo-StorageClass specifies the storage class (empty for default)
spec.registry.builtin.portintegerNo5000Port specifies the registry port.
spec.registry.builtin.pushEndpointstringNo-PushEndpoint overrides the externally advertised registry endpoint used for image pushes and sandbox node image pulls. Every sandbox node must be able to reach this endpoint. Use host[:port] format, without scheme.
spec.registry.builtin.serviceobjectNo-Service configures the registry service exposure.
spec.registry.builtin.service.annotationsobjectNo-Annotations declares Service metadata annotations. Use this for cloud-provider specific load balancer configuration such as ACM certificate attachment on AWS.
spec.registry.builtin.service.portintegerNo80Port specifies the service port
spec.registry.builtin.service.typestringNoClusterIPType specifies the service type
spec.registry.builtin.statefulResourcePolicystringNoRetainStatefulResourcePolicy controls what happens to the builtin registry PVC when the builtin registry is disabled or replaced by an external registry provider. Allowed values: Retain, Delete.
spec.registry.gcpobjectNo-GCP configures GCP registry integration.
spec.registry.gcp.pullSecretobjectNo-PullSecret references the dockerconfigjson secret to use for image pulls. Omit this on GKE when nodes or workload identity can already pull from Artifact Registry without a namespace-local imagePullSecret.
spec.registry.gcp.pullSecret.keystringNo.dockerconfigjsonKey is the key in the secret.
spec.registry.gcp.pullSecret.namestringYes-Name is the name of the secret.
spec.registry.gcp.registrystringYes-Registry specifies the registry hostname.
spec.registry.gcp.serviceAccountSecretobjectNo-ServiceAccountSecret references the service account JSON key. Omit this to use application default credentials inside manager.
spec.registry.gcp.serviceAccountSecret.keystringNoserviceAccount.jsonKey is the key in the secret.
spec.registry.gcp.serviceAccountSecret.namestringYes-Name is the name of the secret.
spec.registry.harborobjectNo-Harbor configures Harbor registry integration.
spec.registry.harbor.credentialsSecretobjectYes-CredentialsSecret references Harbor credentials for push authentication.
spec.registry.harbor.credentialsSecret.namestringYes-Name is the name of the secret.
spec.registry.harbor.credentialsSecret.passwordKeystringNopasswordPasswordKey is the key for password.
spec.registry.harbor.credentialsSecret.usernameKeystringNousernameUsernameKey is the key for username.
spec.registry.harbor.pullSecretobjectYes-PullSecret references the dockerconfigjson secret to use for image pulls.
spec.registry.harbor.pullSecret.keystringNo.dockerconfigjsonKey is the key in the secret.
spec.registry.harbor.pullSecret.namestringYes-Name is the name of the secret.
spec.registry.harbor.registrystringYes-Registry specifies the registry hostname.
spec.registry.imagePullSecretNamestringNosandbox0-registry-pullImagePullSecretName is the secret name to create in template namespaces.
spec.registry.providerstringNobuiltinProvider specifies the registry provider: builtin, aws, gcp, azure, aliyun, or harbor.
Control Plane
spec.controlPlane
4 fields

ControlPlane configures external control plane connection.

FieldTypeRequiredDefaultDescription
spec.controlPlaneobjectNo-ControlPlane configures external control plane connection.
spec.controlPlane.internalAuthPublicKeySecretobjectYes-InternalAuthPublicKeySecret references the secret containing control plane's public key
spec.controlPlane.internalAuthPublicKeySecret.keystringNopasswordKey is the key in the secret
spec.controlPlane.internalAuthPublicKeySecret.namestringNo-Name is the name of the secret
spec.controlPlane.urlstringYes-URL is the control plane regional-gateway URL
Internal Auth
spec.internalAuth
12 fields

InternalAuth configures internal authentication keys

FieldTypeRequiredDefaultDescription
spec.internalAuthobjectNo-InternalAuth configures internal authentication keys
spec.internalAuth.controlPlaneobjectNo-ControlPlane configures control plane key pair
spec.internalAuth.controlPlane.generatebooleanNotrueGenerate enables automatic key generation
spec.internalAuth.controlPlane.secretRefobjectNo-SecretRef references an existing secret containing the key pair
spec.internalAuth.controlPlane.secretRef.namestringYes-Name is the name of the secret
spec.internalAuth.controlPlane.secretRef.privateKeyKeystringNoprivate.keyPrivateKeyKey is the key for private key
spec.internalAuth.controlPlane.secretRef.publicKeyKeystringNopublic.keyPublicKeyKey is the key for public key
spec.internalAuth.dataPlaneobjectNo-DataPlane configures data plane key pair
spec.internalAuth.dataPlane.generatebooleanNotrueGenerate enables automatic key generation
spec.internalAuth.dataPlane.secretRefobjectNo-SecretRef references an existing secret containing the key pair
spec.internalAuth.dataPlane.secretRef.namestringYes-Name is the name of the secret
spec.internalAuth.dataPlane.secretRef.privateKeyKeystringNoprivate.keyPrivateKeyKey is the key for private key
spec.internalAuth.dataPlane.secretRef.publicKeyKeystringNopublic.keyPublicKeyKey is the key for public key
Public Exposure
spec.publicExposure
3 fields

PublicExposure configures public URL exposure for sandboxes

FieldTypeRequiredDefaultDescription
spec.publicExposureobjectNo-PublicExposure configures public URL exposure for sandboxes
spec.publicExposure.enabledbooleanNotrueEnabled enables public exposure routing
spec.publicExposure.regionIdstringNoaws-us-east-1RegionID is the DNS-safe region label used in public URLs. It is not the canonical multi-region tenancy identifier.
spec.publicExposure.rootDomainstringNosandbox0.appRootDomain is the root domain for public exposure URLs
Cluster
spec.cluster
10 fields

Cluster configures cluster identification and capacity

FieldTypeRequiredDefaultDescription
spec.clusterobjectNo-Cluster configures cluster identification and capacity
spec.cluster.capacityobjectNo-Capacity specifies cluster resource capacity
spec.cluster.capacity.cpuobjectNo-CPU specifies CPU capacity
spec.cluster.capacity.cpu.availablestringNo-Available is the available capacity
spec.cluster.capacity.cpu.totalstringNo-Total is the total capacity
spec.cluster.capacity.maxSandboxesintegerNo-MaxSandboxes is the maximum number of sandboxes
spec.cluster.capacity.memoryobjectNo-Memory specifies memory capacity
spec.cluster.capacity.memory.availablestringNo-Available is the available capacity
spec.cluster.capacity.memory.totalstringNo-Total is the total capacity
spec.cluster.idstringYes-ID is the unique Sandbox0 data-plane cluster identifier used in routing and sandbox names. It is separate from the provider cluster name and must stay short enough for sandbox name encoding.
spec.cluster.namestringNo-Name is the human-readable cluster name
Initial Admin User
spec.initUser
6 fields

InitUser configures the initial admin user

FieldTypeRequiredDefaultDescription
spec.initUserobjectNo-InitUser configures the initial admin user
spec.initUser.emailstringNo-Email is the admin user's email
spec.initUser.homeRegionIdstringNo-HomeRegionID is required for global-gateway init users so the bootstrap team is routable.
spec.initUser.namestringNo-Name is the admin user's display name
spec.initUser.passwordSecretobjectNo-PasswordSecret references the secret containing the password
spec.initUser.passwordSecret.keystringNopasswordKey is the key in the secret
spec.initUser.passwordSecret.namestringNo-Name is the name of the secret
Builtin Templates
spec.builtinTemplates
281 fields

BuiltinTemplates defines system builtin templates to seed the template store

FieldTypeRequiredDefaultDescription
spec.builtinTemplatesarray<object>No-BuiltinTemplates defines system builtin templates to seed the template store
spec.builtinTemplates[]objectNo-BuiltinTemplateConfig defines a system builtin template.
spec.builtinTemplates[].descriptionstringNo--
spec.builtinTemplates[].displayNamestringNo--
spec.builtinTemplates[].imagestringNo--
spec.builtinTemplates[].poolobjectNo-BuiltinTemplatePoolConfig holds pool defaults for builtin templates.
spec.builtinTemplates[].pool.maxIdleintegerNo5-
spec.builtinTemplates[].pool.minIdleintegerNo1-
spec.builtinTemplates[].specobjectNo-Spec optionally overrides the full template spec seeded by infra-operator. When omitted, infra-operator builds the spec from the legacy fields above and the built-in preset for the template ID.
spec.builtinTemplates[].spec.clusterIdstringNo-Environment configuration
spec.builtinTemplates[].spec.descriptionstringNo-Description of the template
spec.builtinTemplates[].spec.displayNamestringNo--
spec.builtinTemplates[].spec.envVarsobjectNo-Environment variables injected into the procd-managed sandbox environment.
spec.builtinTemplates[].spec.mainContainerobjectYes-MainContainer configuration (required)
spec.builtinTemplates[].spec.mainContainer.envarray<object>No--
spec.builtinTemplates[].spec.mainContainer.env[]objectNo-EnvVar represents an environment variable
spec.builtinTemplates[].spec.mainContainer.env[].namestringYes--
spec.builtinTemplates[].spec.mainContainer.env[].valuestringYes--
spec.builtinTemplates[].spec.mainContainer.imagestringYes--
spec.builtinTemplates[].spec.mainContainer.imagePullPolicystringNo--
spec.builtinTemplates[].spec.mainContainer.resourcesobjectYes-ResourceQuota defines resource quota (per template)
spec.builtinTemplates[].spec.mainContainer.resources.cpuinteger|stringNo--
spec.builtinTemplates[].spec.mainContainer.resources.ephemeralStorageinteger|stringNo--
spec.builtinTemplates[].spec.mainContainer.resources.memoryinteger|stringNo--
spec.builtinTemplates[].spec.mainContainer.securityContextobjectNo-SecurityContext defines security context for containers
spec.builtinTemplates[].spec.mainContainer.securityContext.allowPrivilegeEscalationbooleanNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.appArmorProfileobjectNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.appArmorProfile.localhostProfilestringNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.appArmorProfile.typestringYes-Allowed values: Unconfined, RuntimeDefault, Localhost.
spec.builtinTemplates[].spec.mainContainer.securityContext.capabilitiesobjectNo-Capabilities defines Linux capabilities
spec.builtinTemplates[].spec.mainContainer.securityContext.capabilities.addarray<string>No--
spec.builtinTemplates[].spec.mainContainer.securityContext.capabilities.add[]stringNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.capabilities.droparray<string>No--
spec.builtinTemplates[].spec.mainContainer.securityContext.capabilities.drop[]stringNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.privilegedbooleanNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.readOnlyRootFilesystembooleanNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.runAsGroupintegerNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.runAsNonRootbooleanNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.runAsUserintegerNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.seccompProfileobjectNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.seccompProfile.localhostProfilestringNo--
spec.builtinTemplates[].spec.mainContainer.securityContext.seccompProfile.typestringYes-Allowed values: Unconfined, RuntimeDefault, Localhost.
spec.builtinTemplates[].spec.networkobjectNo-Template sandbox network policy and optional credential bindings.
spec.builtinTemplates[].spec.network.credentialBindingsarray<object>No-CredentialBindings defines sandbox-scoped credential bindings that EgressCredentialRule entries can resolve by CredentialRef.
spec.builtinTemplates[].spec.network.credentialBindings[]objectNo-CredentialBinding defines one named credential projection that outbound auth rules can reference. The binding itself does not match traffic.
spec.builtinTemplates[].spec.network.credentialBindings[].cachePolicyobjectNo-CachePolicy controls broker-side caching for resolved auth material.
spec.builtinTemplates[].spec.network.credentialBindings[].cachePolicy.ttlstringNo-TTL overrides the default broker cache TTL for resolved auth material.
spec.builtinTemplates[].spec.network.credentialBindings[].projectionobjectYes-Projection defines how resolved source material is projected into runtime auth directives.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.httpHeadersobjectNo-HTTPHeaders projects resolved source data into outbound HTTP headers.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.httpHeaders.headersarray<object>No-Headers lists the outbound headers to synthesize.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.httpHeaders.headers[]objectNo-ProjectedHeader defines one projected header template.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.httpHeaders.headers[].namestringYes-Name is the outbound header name.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.httpHeaders.headers[].valueTemplatestringYes-ValueTemplate is rendered against the resolved source payload.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitutionobjectNo-PlaceholderSubstitution replaces sandbox-visible placeholders at the egress boundary.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacementsarray<object>No-Replacements lists placeholder replacement templates.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacements[]objectNo-PlaceholderReplacement defines one placeholder replacement template.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacements[].locationsarray<string>No-Locations limits replacement to selected HTTP request locations.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacements[].locations[]stringNo-PlaceholderSubstitutionLocation identifies an HTTP request location.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacements[].placeholderstringYes-Placeholder is the opaque sandbox-visible value to replace.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.placeholderSubstitution.replacements[].valueTemplatestringYes-ValueTemplate is rendered against the resolved source payload.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxyobjectNo-SSHProxy projects sandbox-side fake keys and upstream identity for transparent SSH proxying.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxy.knownHostsarray<string>No-KnownHosts contains OpenSSH known_hosts entries used to verify upstream host keys.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxy.knownHosts[]stringNo--
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxy.sandboxPublicKeysarray<string>No-SandboxPublicKeys are fake public keys accepted from sandbox-side SSH clients.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxy.sandboxPublicKeys[]stringNo--
spec.builtinTemplates[].spec.network.credentialBindings[].projection.sshProxy.upstreamUsernamestringNo-UpstreamUsername is the username the ctld network runtime uses when authenticating to the upstream SSH server.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.tlsClientCertificateobjectNo-TLSClientCertificate projects one client certificate for TLS re-origination.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.typestringYes-Type selects the runtime projection shape.
spec.builtinTemplates[].spec.network.credentialBindings[].projection.usernamePasswordobjectNo-UsernamePassword projects one username/password pair into an early auth exchange.
spec.builtinTemplates[].spec.network.credentialBindings[].refstringYes-Ref is the stable identifier matched by EgressCredentialRule.CredentialRef.
spec.builtinTemplates[].spec.network.credentialBindings[].sourceRefstringYes-SourceRef identifies the region-scoped credential source resolved by manager.
spec.builtinTemplates[].spec.network.egressobjectNo-NetworkEgressPolicy defines egress policy. In allow-all mode, denied* fields are enforced and allowed* fields are ignored. In block-all mode, allowed* fields are enforced and denied* fields are ignored.
spec.builtinTemplates[].spec.network.egress.allowedCidrsarray<string>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.allowedCidrs[]stringNo--
spec.builtinTemplates[].spec.network.egress.allowedDomainsarray<string>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.allowedDomains[]stringNo--
spec.builtinTemplates[].spec.network.egress.allowedPortsarray<object>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.allowedPorts[]objectNo-PortSpec defines a port specification
spec.builtinTemplates[].spec.network.egress.allowedPorts[].endPortintegerNo-EndPort for port ranges (optional)
spec.builtinTemplates[].spec.network.egress.allowedPorts[].portintegerYes-Port number
spec.builtinTemplates[].spec.network.egress.allowedPorts[].protocolstringNo-Protocol (tcp or udp)
spec.builtinTemplates[].spec.network.egress.credentialRulesarray<object>No--
spec.builtinTemplates[].spec.network.egress.credentialRules[]objectNo-EgressCredentialRule defines a credential injection rule matched against outbound traffic.
spec.builtinTemplates[].spec.network.egress.credentialRules[].credentialRefstringYes-CredentialRef identifies the binding ref resolved by the runtime egress auth resolver when this traffic rule matches.
spec.builtinTemplates[].spec.network.egress.credentialRules[].domainsarray<string>No-Domains matches outbound destinations by DNS name or wildcard suffix.
spec.builtinTemplates[].spec.network.egress.credentialRules[].domains[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].failurePolicystringNo-FailurePolicy controls whether the ctld network runtime should fail-open or fail-closed when auth material cannot be enforced.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatchobjectNo-HTTPMatch constrains HTTP-family credential injection to request attributes.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headersarray<object>No-Headers matches HTTP request headers.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headers[]objectNo-HTTPValueMatch defines one header or query parameter matcher.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headers[].namestringYes-Name is the header or query parameter name.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headers[].presentbooleanNo-Present controls presence-only matching when Values is empty.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headers[].valuesarray<string>No-Values matches any one value. Empty with Present=true only requires presence.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.headers[].values[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.methodsarray<string>No-Methods matches HTTP methods. Values are normalized to uppercase.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.methods[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.pathPrefixesarray<string>No-PathPrefixes matches URL path prefixes.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.pathPrefixes[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.pathsarray<string>No-Paths matches exact URL paths.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.paths[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.queryarray<object>No-Query matches decoded query parameters.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.query[]objectNo-HTTPValueMatch defines one header or query parameter matcher.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.query[].namestringYes-Name is the header or query parameter name.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.query[].presentbooleanNo-Present controls presence-only matching when Values is empty.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.query[].valuesarray<string>No-Values matches any one value. Empty with Present=true only requires presence.
spec.builtinTemplates[].spec.network.egress.credentialRules[].httpMatch.query[].values[]stringNo--
spec.builtinTemplates[].spec.network.egress.credentialRules[].namestringNo-Name is an optional stable identifier used for merge and replacement.
spec.builtinTemplates[].spec.network.egress.credentialRules[].portsarray<object>No-Ports constrains the rule to specific ports/protocols.
spec.builtinTemplates[].spec.network.egress.credentialRules[].ports[]objectNo-PortSpec defines a port specification
spec.builtinTemplates[].spec.network.egress.credentialRules[].ports[].endPortintegerNo-EndPort for port ranges (optional)
spec.builtinTemplates[].spec.network.egress.credentialRules[].ports[].portintegerYes-Port number
spec.builtinTemplates[].spec.network.egress.credentialRules[].ports[].protocolstringNo-Protocol (tcp or udp)
spec.builtinTemplates[].spec.network.egress.credentialRules[].protocolstringNo-Protocol is the intended application protocol for the rule.
spec.builtinTemplates[].spec.network.egress.credentialRules[].rolloutstringNo-Rollout controls whether this rule is active. Empty defaults to enabled.
spec.builtinTemplates[].spec.network.egress.credentialRules[].tlsModestringNo-TLSMode indicates whether the ctld network runtime should intercept TLS for matching flows.
spec.builtinTemplates[].spec.network.egress.deniedCidrsarray<string>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.deniedCidrs[]stringNo--
spec.builtinTemplates[].spec.network.egress.deniedDomainsarray<string>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.deniedDomains[]stringNo--
spec.builtinTemplates[].spec.network.egress.deniedPortsarray<object>No-Deprecated: use TrafficRules instead.
spec.builtinTemplates[].spec.network.egress.deniedPorts[]objectNo-PortSpec defines a port specification
spec.builtinTemplates[].spec.network.egress.deniedPorts[].endPortintegerNo-EndPort for port ranges (optional)
spec.builtinTemplates[].spec.network.egress.deniedPorts[].portintegerYes-Port number
spec.builtinTemplates[].spec.network.egress.deniedPorts[].protocolstringNo-Protocol (tcp or udp)
spec.builtinTemplates[].spec.network.egress.protocolRulesarray<object>No--
spec.builtinTemplates[].spec.network.egress.protocolRules[]objectNo-ProtocolRule defines protocol-aware controls applied after traffic is allowed.
spec.builtinTemplates[].spec.network.egress.protocolRules[].domainsarray<string>No-Domains matches outbound destinations by DNS name or wildcard suffix.
spec.builtinTemplates[].spec.network.egress.protocolRules[].domains[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpobjectNo-HTTP configures HTTP request policy.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.methodsobjectNo-Methods controls HTTP methods.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.methods.allowedarray<string>No-Allowed permits only listed methods when non-empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.methods.allowed[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.methods.deniedarray<string>No-Denied blocks listed methods before evaluating Allowed.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.methods.denied[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.pathsobjectNo-Paths controls URL paths.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.allowedarray<string>No-Allowed permits only listed exact paths when any allowed path list is non-empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.allowed[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.allowedPrefixesarray<string>No-AllowedPrefixes permits only paths with listed prefixes when any allowed path list is non-empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.allowedPrefixes[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.deniedarray<string>No-Denied blocks listed exact paths before evaluating Allowed.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.denied[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.deniedPrefixesarray<string>No-DeniedPrefixes blocks paths with listed prefixes before evaluating Allowed.
spec.builtinTemplates[].spec.network.egress.protocolRules[].http.paths.deniedPrefixes[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatchobjectNo-HTTPMatch constrains HTTP-carried protocol rules to request attributes.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headersarray<object>No-Headers matches HTTP request headers.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headers[]objectNo-HTTPValueMatch defines one header or query parameter matcher.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headers[].namestringYes-Name is the header or query parameter name.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headers[].presentbooleanNo-Present controls presence-only matching when Values is empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headers[].valuesarray<string>No-Values matches any one value. Empty with Present=true only requires presence.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.headers[].values[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.methodsarray<string>No-Methods matches HTTP methods. Values are normalized to uppercase.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.methods[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.pathPrefixesarray<string>No-PathPrefixes matches URL path prefixes.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.pathPrefixes[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.pathsarray<string>No-Paths matches exact URL paths.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.paths[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.queryarray<object>No-Query matches decoded query parameters.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.query[]objectNo-HTTPValueMatch defines one header or query parameter matcher.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.query[].namestringYes-Name is the header or query parameter name.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.query[].presentbooleanNo-Present controls presence-only matching when Values is empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.query[].valuesarray<string>No-Values matches any one value. Empty with Present=true only requires presence.
spec.builtinTemplates[].spec.network.egress.protocolRules[].httpMatch.query[].values[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcpobjectNo-MCP configures Model Context Protocol operation policy.
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcp.toolsobjectNo-Tools controls MCP tools/call requests.
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcp.tools.allowedarray<string>No-Allowed permits only listed tools when non-empty.
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcp.tools.allowed[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcp.tools.deniedarray<string>No-Denied blocks listed tools before evaluating Allowed.
spec.builtinTemplates[].spec.network.egress.protocolRules[].mcp.tools.denied[]stringNo--
spec.builtinTemplates[].spec.network.egress.protocolRules[].namestringNo-Name is an optional stable identifier used for merge and replacement.
spec.builtinTemplates[].spec.network.egress.protocolRules[].portsarray<object>No-Ports constrains the rule to specific ports/protocols.
spec.builtinTemplates[].spec.network.egress.protocolRules[].ports[]objectNo-PortSpec defines a port specification
spec.builtinTemplates[].spec.network.egress.protocolRules[].ports[].endPortintegerNo-EndPort for port ranges (optional)
spec.builtinTemplates[].spec.network.egress.protocolRules[].ports[].portintegerYes-Port number
spec.builtinTemplates[].spec.network.egress.protocolRules[].ports[].protocolstringNo-Protocol (tcp or udp)
spec.builtinTemplates[].spec.network.egress.protocolRules[].protocolstringYes-Protocol selects the protocol adapter for this rule.
spec.builtinTemplates[].spec.network.egress.protocolRules[].tlsModestringNo-TLSMode controls whether the ctld network runtime must terminate TLS to inspect this protocol.
spec.builtinTemplates[].spec.network.egress.proxyobjectNo-EgressProxyPolicy configures a transparent egress proxy for allowed TCP traffic.
spec.builtinTemplates[].spec.network.egress.proxy.addressstringYes-Address is the proxy endpoint in host:port form.
spec.builtinTemplates[].spec.network.egress.proxy.credentialRefstringNo-CredentialRef optionally references a username_password credential binding.
spec.builtinTemplates[].spec.network.egress.proxy.typestringYes-Type selects the proxy protocol. The first version supports SOCKS5 only.
spec.builtinTemplates[].spec.network.egress.trafficRulesarray<object>No--
spec.builtinTemplates[].spec.network.egress.trafficRules[]objectNo-TrafficRule defines one ordered egress allow/deny matcher.
spec.builtinTemplates[].spec.network.egress.trafficRules[].actionstringYes-Action defines whether matching traffic is allowed or denied.
spec.builtinTemplates[].spec.network.egress.trafficRules[].appProtocolsarray<string>No-AppProtocols constrains the rule to classified application protocols.
spec.builtinTemplates[].spec.network.egress.trafficRules[].appProtocols[]stringNo-TrafficRuleAppProtocol defines the classified application protocol matched by one traffic rule.
spec.builtinTemplates[].spec.network.egress.trafficRules[].cidrsarray<string>No-CIDRs matches outbound destinations by IP range.
spec.builtinTemplates[].spec.network.egress.trafficRules[].cidrs[]stringNo--
spec.builtinTemplates[].spec.network.egress.trafficRules[].domainsarray<string>No-Domains matches outbound destinations by DNS name or wildcard suffix.
spec.builtinTemplates[].spec.network.egress.trafficRules[].domains[]stringNo--
spec.builtinTemplates[].spec.network.egress.trafficRules[].namestringNo-Name is an optional stable identifier used for merge and replacement.
spec.builtinTemplates[].spec.network.egress.trafficRules[].portsarray<object>No-Ports constrains the rule to specific ports/protocols.
spec.builtinTemplates[].spec.network.egress.trafficRules[].ports[]objectNo-PortSpec defines a port specification
spec.builtinTemplates[].spec.network.egress.trafficRules[].ports[].endPortintegerNo-EndPort for port ranges (optional)
spec.builtinTemplates[].spec.network.egress.trafficRules[].ports[].portintegerYes-Port number
spec.builtinTemplates[].spec.network.egress.trafficRules[].ports[].protocolstringNo-Protocol (tcp or udp)
spec.builtinTemplates[].spec.network.modestringYes-NetworkPolicyMode defines network policy mode
spec.builtinTemplates[].spec.podobjectNo-Pod-level configuration
spec.builtinTemplates[].spec.pod.affinityobjectNo-Affinity defines pod affinity rules
spec.builtinTemplates[].spec.pod.affinity.nodeAffinityobjectNo-NodeAffinity defines node affinity rules
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecutionarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[]objectNo-PreferredSchedulingTerm defines preferred scheduling term
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preferenceobjectYes-NodeSelectorTerm defines node selector term
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressionsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[]objectNo-NodeSelectorRequirement defines node selector requirement
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFieldsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[]objectNo-NodeSelectorRequirement defines node selector requirement
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].weightintegerYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecutionobjectNo-NodeSelector defines node selector
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTermsarray<object>Yes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[]objectNo-NodeSelectorTerm defines node selector term
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressionsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[]objectNo-NodeSelectorRequirement defines node selector requirement
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFieldsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[]objectNo-NodeSelectorRequirement defines node selector requirement
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinityobjectNo-PodAffinity defines pod affinity rules
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecutionarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[]objectNo-WeightedPodAffinityTerm defines weighted pod affinity term
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTermobjectYes-PodAffinityTerm defines pod affinity term
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelectorobjectNo-LabelSelector defines label selector
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressionsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[]objectNo-LabelSelectorRequirement defines label selector requirement
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchLabelsobjectNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespacesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaces[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.topologyKeystringYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].weightintegerYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecutionarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[]objectNo-PodAffinityTerm defines pod affinity term
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelectorobjectNo-LabelSelector defines label selector
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressionsarray<object>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[]objectNo-LabelSelectorRequirement defines label selector requirement
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[].keystringYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[].operatorstringYes--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[].valuesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[].values[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchLabelsobjectNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespacesarray<string>No--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaces[]stringNo--
spec.builtinTemplates[].spec.pod.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].topologyKeystringYes--
spec.builtinTemplates[].spec.pod.emptyDirMountsarray<object>No--
spec.builtinTemplates[].spec.pod.emptyDirMounts[]objectNo-EmptyDirMountSpec declares an ephemeral Kubernetes emptyDir mount for the main sandbox container.
spec.builtinTemplates[].spec.pod.emptyDirMounts[].mountPathstringYes--
spec.builtinTemplates[].spec.pod.emptyDirMounts[].sizeLimitinteger|stringNo--
spec.builtinTemplates[].spec.pod.nodeSelectorobjectNo--
spec.builtinTemplates[].spec.pod.serviceAccountNamestringNo--
spec.builtinTemplates[].spec.pod.tolerationsarray<object>No--
spec.builtinTemplates[].spec.pod.tolerations[]objectNo-Toleration defines pod toleration
spec.builtinTemplates[].spec.pod.tolerations[].effectstringNo--
spec.builtinTemplates[].spec.pod.tolerations[].keystringNo--
spec.builtinTemplates[].spec.pod.tolerations[].operatorstringNo--
spec.builtinTemplates[].spec.pod.tolerations[].valuestringNo--
spec.builtinTemplates[].spec.poolobjectYes-Pool strategy
spec.builtinTemplates[].spec.pool.maxIdleintegerYes--
spec.builtinTemplates[].spec.pool.minIdleintegerYes--
spec.builtinTemplates[].spec.tagsarray<string>No--
spec.builtinTemplates[].spec.tags[]stringNo--
spec.builtinTemplates[].spec.volumeMountsarray<object>No-VolumeMounts declares the fixed sandbox volume portal mount points that can be bound to concrete SandboxVolumes when a sandbox is claimed.
spec.builtinTemplates[].spec.volumeMounts[]objectNo--
spec.builtinTemplates[].spec.volumeMounts[].mountPathstringYes--
spec.builtinTemplates[].spec.volumeMounts[].namestringYes--
spec.builtinTemplates[].spec.volumeMounts[].readOnlybooleanNo--
spec.builtinTemplates[].templateIdstringYes--
Sandbox Node Placement
spec.sandboxNodePlacement
9 fields

SandboxNodePlacement configures the shared node placement used by sandbox workloads and node-local sandbox services.

FieldTypeRequiredDefaultDescription
spec.sandboxNodePlacementobjectNo-SandboxNodePlacement configures the shared node placement used by sandbox workloads and node-local sandbox services.
spec.sandboxNodePlacement.nodeSelectorobjectNo-NodeSelector constrains sandbox workloads and node-local sandbox services onto a specific node set.
spec.sandboxNodePlacement.preferredNodeSelectorobjectNo-PreferredNodeSelector gives manager-created sandbox Pods a soft scheduling preference for nodes matching all labels. Hot claims use the same selector when choosing among already scheduled idle Pods. Node-local services do not consume this preference.
spec.sandboxNodePlacement.tolerationsarray<object>No-Tolerations allow sandbox workloads and node-local sandbox services to run on tainted sandbox nodes.
spec.sandboxNodePlacement.tolerations[]objectNo-The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
spec.sandboxNodePlacement.tolerations[].effectstringNo-Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
spec.sandboxNodePlacement.tolerations[].keystringNo-Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
spec.sandboxNodePlacement.tolerations[].operatorstringNo-Operator represents a key's relationship to the value. Valid operators are Exists, Equal, Lt, and Gt. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. Lt and Gt perform numeric comparisons (requires feature gate TaintTolerationComparisonOperators).
spec.sandboxNodePlacement.tolerations[].tolerationSecondsintegerNo-TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
spec.sandboxNodePlacement.tolerations[].valuestringNo-Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
Service: regionalGateway
spec.services.regionalGateway
80 fields

RegionalGateway configures the regional-gateway service (control plane)

FieldTypeRequiredDefaultDescription
spec.services.regionalGatewayobjectNo-RegionalGateway configures the regional-gateway service (control plane)
spec.services.regionalGateway.configobjectNo-Config contains regional-gateway specific configuration
spec.services.regionalGateway.config.admissionRequireStatebooleanNofalseAdmissionRequireState rejects usage-starting requests until a team admission record has been projected into the region database. Hosted prepaid deployments should enable it; self-hosted deployments default to allowing teams without an external billing projection.
spec.services.regionalGateway.config.authModestringNoself_hostedAllowed values: self_hosted, federated_global.
spec.services.regionalGateway.config.baseUrlstringNohttp://localhost:8080BaseURL sets the external base URL used by browser-facing auth flows.
spec.services.regionalGateway.config.builtInAuthobjectNo-BuiltInAuth configures local email/password authentication.
spec.services.regionalGateway.config.builtInAuth.adminOnlybooleanNo-AdminOnly restricts built-in auth to admin accounts only.
spec.services.regionalGateway.config.builtInAuth.allowRegistrationbooleanNo-AllowRegistration allows new users to register.
spec.services.regionalGateway.config.builtInAuth.emailVerificationRequiredbooleanNo-EmailVerificationRequired requires email verification.
spec.services.regionalGateway.config.builtInAuth.enabledbooleanNotrueEnabled enables built-in email/password authentication.
spec.services.regionalGateway.config.clusterCacheTtlstringNo30s-
spec.services.regionalGateway.config.databaseMaxConnsintegerNo30-
spec.services.regionalGateway.config.databaseMinConnsintegerNo8-
spec.services.regionalGateway.config.defaultTeamNamestringNoPersonal TeamIdentity and Teams
spec.services.regionalGateway.config.editionstringNoself-hosted-
spec.services.regionalGateway.config.httpPortintegerNo8080-
spec.services.regionalGateway.config.internalAuthCallerstringNoregional-gateway-
spec.services.regionalGateway.config.internalAuthTtlstringNo30s-
spec.services.regionalGateway.config.jwtAccessTokenTTLstringNo15m-
spec.services.regionalGateway.config.jwtIssuerstringNo-JWTIssuer sets the JWT issuer for gateway-issued tokens.
spec.services.regionalGateway.config.jwtPrivateKeyFilestringNo-JWTPrivateKeyFile points at a PEM-encoded Ed25519 private key file used to sign user-facing JWTs.
spec.services.regionalGateway.config.jwtPrivateKeyPEMstringNo-JWTPrivateKeyPEM sets the PEM-encoded Ed25519 private key used to sign user-facing JWTs.
spec.services.regionalGateway.config.jwtPublicKeyFilestringNo-JWTPublicKeyFile points at a PEM-encoded Ed25519 public key file used to verify user-facing JWTs.
spec.services.regionalGateway.config.jwtPublicKeyPEMstringNo-JWTPublicKeyPEM sets the PEM-encoded Ed25519 public key used to verify user-facing JWTs.
spec.services.regionalGateway.config.jwtRefreshTokenTTLstringNo168h-
spec.services.regionalGateway.config.logLevelstringNoinfo-
spec.services.regionalGateway.config.oidcProvidersarray<object>No-OIDCProviders configures external identity providers.
spec.services.regionalGateway.config.oidcProviders[]objectNo-OIDCProviderConfig configures an OIDC identity provider.
spec.services.regionalGateway.config.oidcProviders[].autoProvisionbooleanNo--
spec.services.regionalGateway.config.oidcProviders[].clientIdstringNo--
spec.services.regionalGateway.config.oidcProviders[].clientSecretstringNo--
spec.services.regionalGateway.config.oidcProviders[].discoveryUrlstringNo--
spec.services.regionalGateway.config.oidcProviders[].enabledbooleanNo--
spec.services.regionalGateway.config.oidcProviders[].externalAuthPortalUrlstringNo--
spec.services.regionalGateway.config.oidcProviders[].idstringNo--
spec.services.regionalGateway.config.oidcProviders[].namestringNo--
spec.services.regionalGateway.config.oidcProviders[].scopesarray<string>No[openid, email, profile]-
spec.services.regionalGateway.config.oidcProviders[].scopes[]stringNo--
spec.services.regionalGateway.config.oidcProviders[].teamMappingobjectNo-TeamMappingConfig configures automatic team mapping for OIDC users.
spec.services.regionalGateway.config.oidcProviders[].teamMapping.defaultRolestringNo--
spec.services.regionalGateway.config.oidcProviders[].teamMapping.defaultTeamIdstringNo--
spec.services.regionalGateway.config.oidcProviders[].teamMapping.domainstringNo--
spec.services.regionalGateway.config.oidcProviders[].tokenEndpointAuthMethodstringNo--
spec.services.regionalGateway.config.oidcStateCleanupIntervalstringNo5m-
spec.services.regionalGateway.config.oidcStateTtlstringNo10m-
spec.services.regionalGateway.config.proxyTimeoutstringNo10s-
spec.services.regionalGateway.config.rateLimitBurstintegerNo200-
spec.services.regionalGateway.config.rateLimitCleanupIntervalstringNo10m-
spec.services.regionalGateway.config.rateLimitRpsintegerNo100Rate limiting
spec.services.regionalGateway.config.schedulerEnabledbooleanNo--
spec.services.regionalGateway.config.schedulerUrlstringNo--
spec.services.regionalGateway.config.serverIdleTimeoutstringNo120s-
spec.services.regionalGateway.config.serverReadTimeoutstringNo30s-
spec.services.regionalGateway.config.serverWriteTimeoutstringNo60s-
spec.services.regionalGateway.config.shutdownTimeoutstringNo30s-
spec.services.regionalGateway.enabledbooleanNofalseEnabled enables or disables the service
spec.services.regionalGateway.ingressobjectNo-Ingress configures ingress settings
spec.services.regionalGateway.ingress.annotationsobjectNo-Annotations specifies provider-specific ingress annotations.
spec.services.regionalGateway.ingress.classNamestringNo-ClassName specifies the ingress class name
spec.services.regionalGateway.ingress.enabledbooleanNofalseEnabled enables ingress
spec.services.regionalGateway.ingress.extraHostsarray<string>No-ExtraHosts specifies additional ingress hosts routed to the same backend.
spec.services.regionalGateway.ingress.extraHosts[]stringNo--
spec.services.regionalGateway.ingress.hoststringNo-Host specifies the ingress host
spec.services.regionalGateway.ingress.tlsarray<object>No-TLS specifies host groups and their backing TLS secrets. When set, TLS takes precedence over TLSSecret.
spec.services.regionalGateway.ingress.tls[]objectNo-IngressTLSConfig defines one TLS certificate binding for ingress hosts.
spec.services.regionalGateway.ingress.tls[].hostsarray<string>No-Hosts specifies the hosts covered by this TLS secret.
spec.services.regionalGateway.ingress.tls[].hosts[]stringNo--
spec.services.regionalGateway.ingress.tls[].secretNamestringNo-SecretName specifies the Kubernetes TLS secret name.
spec.services.regionalGateway.ingress.tlsSecretstringNo-TLSSecret specifies the TLS secret name
spec.services.regionalGateway.replicasintegerNo1Replicas specifies the number of replicas
spec.services.regionalGateway.resourcesobjectNo-Resources specifies resource requirements
spec.services.regionalGateway.resources.claimsarray<object>No-Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers.
spec.services.regionalGateway.resources.claims[]objectNo-ResourceClaim references one entry in PodSpec.ResourceClaims.
spec.services.regionalGateway.resources.claims[].namestringYes-Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.
spec.services.regionalGateway.resources.claims[].requeststringNo-Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.
spec.services.regionalGateway.resources.limitsobjectNo-Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.regionalGateway.resources.requestsobjectNo-Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.regionalGateway.serviceobjectNo-Service configures the Kubernetes service
spec.services.regionalGateway.service.annotationsobjectNo-Annotations declares Service metadata annotations. Use this for cloud-provider specific load balancer configuration such as ACM certificate attachment on AWS.
spec.services.regionalGateway.service.portintegerNo80Port specifies the service port
spec.services.regionalGateway.service.typestringNoClusterIPType specifies the service type
Service: scheduler
spec.services.scheduler
28 fields

Scheduler configures the scheduler service (control plane)

FieldTypeRequiredDefaultDescription
spec.services.schedulerobjectNo-Scheduler configures the scheduler service (control plane)
spec.services.scheduler.configobjectNo-Config contains scheduler specific configuration
spec.services.scheduler.config.databasePoolobjectNo-DatabasePoolConfig defines scheduler database pool settings.
spec.services.scheduler.config.databasePool.maxConnIdleTimestringNo5m-
spec.services.scheduler.config.databasePool.maxConnLifetimestringNo30m-
spec.services.scheduler.config.databasePool.maxConnsintegerNo10-
spec.services.scheduler.config.databasePool.minConnsintegerNo2-
spec.services.scheduler.config.httpPortintegerNo8080-
spec.services.scheduler.config.idleTimeoutstringNo120s-
spec.services.scheduler.config.logLevelstringNoinfo-
spec.services.scheduler.config.podsPerNodeintegerNo50-
spec.services.scheduler.config.proxyTimeoutstringNo10s-
spec.services.scheduler.config.readTimeoutstringNo30s-
spec.services.scheduler.config.reconcileIntervalstringNo30s-
spec.services.scheduler.config.shutdownTimeoutstringNo30s-
spec.services.scheduler.config.writeTimeoutstringNo60s-
spec.services.scheduler.enabledbooleanNofalseEnabled enables or disables the service
spec.services.scheduler.replicasintegerNo1Replicas specifies the number of replicas
spec.services.scheduler.resourcesobjectNo-Resources specifies resource requirements
spec.services.scheduler.resources.claimsarray<object>No-Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers.
spec.services.scheduler.resources.claims[]objectNo-ResourceClaim references one entry in PodSpec.ResourceClaims.
spec.services.scheduler.resources.claims[].namestringYes-Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.
spec.services.scheduler.resources.claims[].requeststringNo-Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.
spec.services.scheduler.resources.limitsobjectNo-Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.scheduler.resources.requestsobjectNo-Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.scheduler.serviceobjectNo-Service configures the Kubernetes service
spec.services.scheduler.service.annotationsobjectNo-Annotations declares Service metadata annotations. Use this for cloud-provider specific load balancer configuration such as ACM certificate attachment on AWS.
spec.services.scheduler.service.portintegerNo80Port specifies the service port
spec.services.scheduler.service.typestringNoClusterIPType specifies the service type
Service: clusterGateway
spec.services.clusterGateway
63 fields

ClusterGateway configures the cluster-gateway service (data plane)

FieldTypeRequiredDefaultDescription
spec.services.clusterGatewayobjectNo-ClusterGateway configures the cluster-gateway service (data plane)
spec.services.clusterGateway.configobjectNo-Config contains cluster-gateway specific configuration
spec.services.clusterGateway.config.admissionRequireStatebooleanNofalseAdmissionRequireState rejects usage-starting requests until a team admission record has been projected into the region database. Hosted prepaid deployments should enable it; self-hosted deployments default to allowing teams without an external billing projection.
spec.services.clusterGateway.config.allowedCallersarray<string>No[regional-gateway, scheduler, cluster-gateway]-
spec.services.clusterGateway.config.allowedCallers[]stringNo--
spec.services.clusterGateway.config.authModestringNointernalAllowed values: internal, public, both.
spec.services.clusterGateway.config.baseUrlstringNohttp://localhost:8080BaseURL sets the external base URL used by browser-facing auth flows.
spec.services.clusterGateway.config.builtInAuthobjectNo-BuiltInAuth configures local email/password authentication.
spec.services.clusterGateway.config.builtInAuth.adminOnlybooleanNo-AdminOnly restricts built-in auth to admin accounts only.
spec.services.clusterGateway.config.builtInAuth.allowRegistrationbooleanNo-AllowRegistration allows new users to register.
spec.services.clusterGateway.config.builtInAuth.emailVerificationRequiredbooleanNo-EmailVerificationRequired requires email verification.
spec.services.clusterGateway.config.builtInAuth.enabledbooleanNotrueEnabled enables built-in email/password authentication.
spec.services.clusterGateway.config.databaseMaxConnsintegerNo30-
spec.services.clusterGateway.config.databaseMinConnsintegerNo8-
spec.services.clusterGateway.config.defaultTeamNamestringNoPersonal TeamIdentity and Teams
spec.services.clusterGateway.config.healthCheckPeriodstringNo10s-
spec.services.clusterGateway.config.httpPortintegerNo8443-
spec.services.clusterGateway.config.jwtAccessTokenTTLstringNo15m-
spec.services.clusterGateway.config.jwtIssuerstringNo-JWTIssuer sets the JWT issuer for gateway-issued tokens.
spec.services.clusterGateway.config.jwtPrivateKeyFilestringNo-JWTPrivateKeyFile points at a PEM-encoded Ed25519 private key file used to sign user-facing JWTs.
spec.services.clusterGateway.config.jwtPrivateKeyPEMstringNo-JWTPrivateKeyPEM sets the PEM-encoded Ed25519 private key used to sign user-facing JWTs.
spec.services.clusterGateway.config.jwtPublicKeyFilestringNo-JWTPublicKeyFile points at a PEM-encoded Ed25519 public key file used to verify user-facing JWTs.
spec.services.clusterGateway.config.jwtPublicKeyPEMstringNo-JWTPublicKeyPEM sets the PEM-encoded Ed25519 public key used to verify user-facing JWTs.
spec.services.clusterGateway.config.jwtRefreshTokenTTLstringNo168h-
spec.services.clusterGateway.config.logLevelstringNoinfo-
spec.services.clusterGateway.config.oidcProvidersarray<object>No-OIDCProviders configures external identity providers.
spec.services.clusterGateway.config.oidcProviders[]objectNo-OIDCProviderConfig configures an OIDC identity provider.
spec.services.clusterGateway.config.oidcProviders[].autoProvisionbooleanNo--
spec.services.clusterGateway.config.oidcProviders[].clientIdstringNo--
spec.services.clusterGateway.config.oidcProviders[].clientSecretstringNo--
spec.services.clusterGateway.config.oidcProviders[].discoveryUrlstringNo--
spec.services.clusterGateway.config.oidcProviders[].enabledbooleanNo--
spec.services.clusterGateway.config.oidcProviders[].externalAuthPortalUrlstringNo--
spec.services.clusterGateway.config.oidcProviders[].idstringNo--
spec.services.clusterGateway.config.oidcProviders[].namestringNo--
spec.services.clusterGateway.config.oidcProviders[].scopesarray<string>No[openid, email, profile]-
spec.services.clusterGateway.config.oidcProviders[].scopes[]stringNo--
spec.services.clusterGateway.config.oidcProviders[].teamMappingobjectNo-TeamMappingConfig configures automatic team mapping for OIDC users.
spec.services.clusterGateway.config.oidcProviders[].teamMapping.defaultRolestringNo--
spec.services.clusterGateway.config.oidcProviders[].teamMapping.defaultTeamIdstringNo--
spec.services.clusterGateway.config.oidcProviders[].teamMapping.domainstringNo--
spec.services.clusterGateway.config.oidcProviders[].tokenEndpointAuthMethodstringNo--
spec.services.clusterGateway.config.oidcStateCleanupIntervalstringNo5m-
spec.services.clusterGateway.config.oidcStateTtlstringNo10m-
spec.services.clusterGateway.config.proxyTimeoutstringNo10s-
spec.services.clusterGateway.config.rateLimitBurstintegerNo200-
spec.services.clusterGateway.config.rateLimitCleanupIntervalstringNo10m-
spec.services.clusterGateway.config.rateLimitRpsintegerNo100Rate limiting
spec.services.clusterGateway.config.schedulerPermissionsarray<string>No[*:*]-
spec.services.clusterGateway.config.schedulerPermissions[]stringNo--
spec.services.clusterGateway.config.shutdownTimeoutstringNo30s-
spec.services.clusterGateway.enabledbooleanNofalseEnabled enables or disables the service
spec.services.clusterGateway.replicasintegerNo1Replicas specifies the number of replicas
spec.services.clusterGateway.resourcesobjectNo-Resources specifies resource requirements
spec.services.clusterGateway.resources.claimsarray<object>No-Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers.
spec.services.clusterGateway.resources.claims[]objectNo-ResourceClaim references one entry in PodSpec.ResourceClaims.
spec.services.clusterGateway.resources.claims[].namestringYes-Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.
spec.services.clusterGateway.resources.claims[].requeststringNo-Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.
spec.services.clusterGateway.resources.limitsobjectNo-Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.clusterGateway.resources.requestsobjectNo-Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.clusterGateway.serviceobjectNo-Service configures the Kubernetes service
spec.services.clusterGateway.service.annotationsobjectNo-Annotations declares Service metadata annotations. Use this for cloud-provider specific load balancer configuration such as ACM certificate attachment on AWS.
spec.services.clusterGateway.service.portintegerNo80Port specifies the service port
spec.services.clusterGateway.service.typestringNoClusterIPType specifies the service type
Service: manager
spec.services.manager
77 fields

Manager configures the manager service (data plane)

FieldTypeRequiredDefaultDescription
spec.services.managerobjectNo-Manager configures the manager service (data plane)
spec.services.manager.configobjectNo-Config contains manager specific configuration
spec.services.manager.config.allowColdStartWithoutReadyDataPlanebooleanNo-AllowColdStartWithoutReadyDataPlane lets cold claims create Pending pods when no sandbox data-plane-ready nodes exist yet. This is required for node autoscaler scale-from-zero deployments.
spec.services.manager.config.autoscalerobjectNo-AutoscalerConfig defines manager autoscaler settings.
spec.services.manager.config.autoscaler.maxScaleStepintegerNo10-
spec.services.manager.config.autoscaler.minIdleBufferintegerNo2-
spec.services.manager.config.autoscaler.minScaleIntervalstringNo100ms-
spec.services.manager.config.autoscaler.noTrafficScaleDownAfterstringNo10m-
spec.services.manager.config.autoscaler.scaleDownPercentstringNo0.1-
spec.services.manager.config.autoscaler.scaleUpFactorstringNo1.5-
spec.services.manager.config.autoscaler.targetIdleRatiostringNo0.2-
spec.services.manager.config.autoscalerSafeToEvictAnnotationKeysarray<string>No-AutoscalerSafeToEvictAnnotationKeys configures the platform-specific pod annotation keys toggled by manager for idle and claimed sandbox pods.
spec.services.manager.config.autoscalerSafeToEvictAnnotationKeys[]stringNo--
spec.services.manager.config.cleanupIntervalstringNo60s-
spec.services.manager.config.databaseMaxConnsintegerNo10-
spec.services.manager.config.databaseMinConnsintegerNo2-
spec.services.manager.config.defaultSandboxTtlstringNo0s-
spec.services.manager.config.defaultTeamQuotasarray<object>No-DefaultTeamQuotas declaratively reconciles region-wide quota defaults. Team-specific database policies override these defaults.
spec.services.manager.config.defaultTeamQuotas[]objectNo-TeamQuotaLimitConfig configures a region default for teams without an override for the same dimension.
spec.services.manager.config.defaultTeamQuotas[].burstValueintegerNo-BurstValue is the maximum immediately available tokens for a rate quota.
spec.services.manager.config.defaultTeamQuotas[].dimensionstringYes-Allowed values: active_sandboxes, sandbox_claims, volume_storage_gb, snapshot_storage_gb, api_requests, network_egress_bytes, network_ingress_bytes.
spec.services.manager.config.defaultTeamQuotas[].intervalMsintegerNo-IntervalMS is the token refill interval for rate quotas and is omitted for capacity quotas.
spec.services.manager.config.defaultTeamQuotas[].limitValueintegerYes--
spec.services.manager.config.egressAuthDefaultResolveTtlstringNo5mEgressAuthDefaultResolveTTL controls the default lifetime of resolved egress auth material cached by the ctld network runtime when a binding does not set cachePolicy.ttl.
spec.services.manager.config.httpPortintegerNo8080-
spec.services.manager.config.k8sClientBurstintegerNo100-
spec.services.manager.config.k8sClientQpsintegerNo50-
spec.services.manager.config.kubeConfigstringNo--
spec.services.manager.config.leaderElectionbooleanNotrue-
spec.services.manager.config.logLevelstringNoinfo-
spec.services.manager.config.metricsPortintegerNo9090-
spec.services.manager.config.netdPolicyApplyPollIntervalstringNo500ms-
spec.services.manager.config.netdPolicyApplyTimeoutstringNo30s-
spec.services.manager.config.pauseMemoryBufferRatiostringNo1.1-
spec.services.manager.config.pauseMinCpustringNo10m-
spec.services.manager.config.pauseMinMemoryLimitstringNo32Mi-
spec.services.manager.config.pauseMinMemoryRequeststringNo10Mi-
spec.services.manager.config.podTeardownobjectNo-PodTeardownConfig defines manager pod teardown concurrency limits.
spec.services.manager.config.podTeardown.maxConcurrentPerDegradedNodeintegerNo1-
spec.services.manager.config.podTeardown.maxConcurrentPerNodeintegerNo4-
spec.services.manager.config.podTeardown.maxConcurrentReplacementsintegerNo40-
spec.services.manager.config.procdBinImageRefstringNo-ProcdBinImageRef overrides the OCI image used for the procd binary image volume.
spec.services.manager.config.procdClientTimeoutstringNo30s-
spec.services.manager.config.procdConfigobjectNo-ProcdConfig defines user-facing procd settings managed by manager.
spec.services.manager.config.procdConfig.contextCleanupIntervalstringNo30s-
spec.services.manager.config.procdConfig.contextFinishedTtlstringNo0s-
spec.services.manager.config.procdConfig.contextIdleTimeoutstringNo0s-
spec.services.manager.config.procdConfig.contextMaxLifetimestringNo0s-
spec.services.manager.config.procdConfig.httpPortintegerNo49983-
spec.services.manager.config.procdConfig.logLevelstringNoinfo-
spec.services.manager.config.procdConfig.rootPathstringNo/workspace-
spec.services.manager.config.procdConfig.webhookBaseBackoffstringNo500ms-
spec.services.manager.config.procdConfig.webhookMaxRetriesintegerNo3-
spec.services.manager.config.procdConfig.webhookOutboxDirstringNo--
spec.services.manager.config.procdConfig.webhookQueueSizeintegerNo256-
spec.services.manager.config.procdConfig.webhookRequestTimeoutstringNo5s-
spec.services.manager.config.resyncPeriodstringNo30s-
spec.services.manager.config.runtimeReadyTimeoutstringNo90s-
spec.services.manager.config.sandboxMaxMemorystringNo32GiSandboxMaxMemory is the maximum memory limit accepted for a single sandbox.
spec.services.manager.config.sandboxRuntimeClassNamestringNo--
spec.services.manager.config.shutdownTimeoutstringNo30s-
spec.services.manager.config.teamTemplateMemoryPerCpustringNo4Gi-
spec.services.manager.config.webhookCertPathstringNo/tmp/k8s-webhook-server/serving-certs/tls.crt-
spec.services.manager.config.webhookKeyPathstringNo/tmp/k8s-webhook-server/serving-certs/tls.key-
spec.services.manager.config.webhookPortintegerNo9443-
spec.services.manager.enabledbooleanNofalseEnabled enables or disables the service
spec.services.manager.replicasintegerNo1Replicas specifies the number of replicas
spec.services.manager.resourcesobjectNo-Resources specifies resource requirements
spec.services.manager.resources.claimsarray<object>No-Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers.
spec.services.manager.resources.claims[]objectNo-ResourceClaim references one entry in PodSpec.ResourceClaims.
spec.services.manager.resources.claims[].namestringYes-Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.
spec.services.manager.resources.claims[].requeststringNo-Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.
spec.services.manager.resources.limitsobjectNo-Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.manager.resources.requestsobjectNo-Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
spec.services.manager.serviceobjectNo-Service configures the Kubernetes service
spec.services.manager.service.annotationsobjectNo-Annotations declares Service metadata annotations. Use this for cloud-provider specific load balancer configuration such as ACM certificate attachment on AWS.
spec.services.manager.service.portintegerNo80Port specifies the service port
spec.services.manager.service.typestringNoClusterIPType specifies the service type

Practical Rules#

  • Pin the infra-operator chart version in production instead of relying on floating tags.
  • Prefer external PostgreSQL and external object storage for serious deployments.
  • Configure spec.storage and spec.storage.runtime for volume and snapshot features.
  • Configure spec.network for sandbox network policy; enforcement runs in the active ctld process on Linux nodes.
  • Use sandboxNodePlacement.nodeSelector and tolerations to keep sandbox workloads and the node-local ctld pair on the same node set. Use preferredNodeSelector only for soft sandbox-Pod placement and hot-claim ordering.
  • Treat sandbox0.ai/data-plane-ready as operator-owned; use your own labels under sandboxNodePlacement and let infra-operator manage readiness.
  • If sandbox workloads use gvisor or kata, keep ctld on a host-compatible runtime such as the cluster default runtime.
  • services.manager.config.sandboxRuntimeClassName references an existing Kubernetes RuntimeClass; it does not install the node-level containerd handler.
  • Keep control-plane and data-plane components in the same storage and latency domain for a given region.

Next Steps#