TrustTier
TrustTier (maqpna.com/v1alpha1): every field, type, default and validation rule, generated from the CRD schema.
TrustTier is a cluster-scoped isolation and sovereignty class.
At a glance#
| Property | Value |
|---|---|
| API version | maqpna.com/v1alpha1 |
| Kind | TrustTier |
| Scope | Cluster |
| Plural | trusttiers |
| Short names | tier, tt |
| Categories | maqpna |
| Status subresource | yes |
kubectl get trusttiers
kubectl get tier <name> -o yaml
kubectl explain trusttiers.spec
Columns in kubectl get#
| Column | Type | From |
|---|---|---|
| Runtime | string | .spec.runtimeClassName |
| Isolation | string | .spec.isolation |
| Jurisdiction | string | .spec.jurisdiction |
| WarmReady | integer | .status.warmPoolReady |
| Age | date | .metadata.creationTimestamp |
Example#
From config/samples/tier-0-gvisor.yaml:
apiVersion: maqpna.com/v1alpha1
kind: TrustTier
metadata:
name: tier-0-gvisor
spec:
runtimeClassName: gvisor
isolation: gvisor
jurisdiction: EU-DE
egress: gateway-only
allowedNodeLabels:
topology.kubernetes.io/region: eu-central-1
defaultResources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi
maxSessionTTL: 8h
From config/samples/tier-1-microvm.yaml:
apiVersion: maqpna.com/v1alpha1
kind: TrustTier
metadata:
name: tier-1-microvm
spec:
runtimeClassName: kata-fc
isolation: microvm
jurisdiction: EU-DE
egress: gateway-only
# Warm-pool path: sessions are provisioned via an upstream SandboxClaim against
# the SandboxWarmPool "maqpna-tier-1-microvm", created from this SandboxTemplate
# in each warm-pool namespace.
sandboxTemplateName: coder-microvm
warmPoolSize: 2
warmPoolNamespaces:
- team-a
allowedNodeLabels:
topology.kubernetes.io/region: eu-central-1
defaultResources:
limits:
cpu: "2"
memory: 4Gi
maxSessionTTL: 4h
Spec fields#
TrustTierSpec defines an isolation / sovereignty class that Agents run in.
| Field | Type | Required | Description |
|---|---|---|---|
allowedNodeLabels |
map[string]string | allowedNodeLabels constrains sandbox scheduling via required node affinity (e.g. topology.kubernetes.io/region: eu-central-1). | |
allowedProviderTools |
[]string | allowedProviderTools caps the provider-hosted server tools Agents in this tier may enable with spec.model.providerTools: the gateway route gets the intersection. A canonical name (web_search) admits its versioned types (web_search_20250305); a versioned entry admits only itself. Empty or absent: none allowed. Max items: 16. |
|
attestationRequired |
boolean | attestationRequired requires remote attestation evidence before the identity broker will mint tokens for sessions in this tier. | |
defaultResources |
object | defaultResources applied to agent containers that do not set resources. | |
defaultResources.claims |
[]object | 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. | |
defaultResources.claims[].name |
string | yes | 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. |
defaultResources.claims[].request |
string | 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. | |
defaultResources.limits |
map[string]int or string | Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | |
defaultResources.requests |
map[string]int or string | 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/ | |
egress |
string | egress is the egress posture for sandboxes in this tier. One of: gateway-only, deny-all. Default: "gateway-only". |
|
isolation |
string | yes | isolation describes the isolation boundary provided by the runtime class. One of: gvisor, microvm, confidential. |
jurisdiction |
string | jurisdiction is the data-residency jurisdiction this tier guarantees (e.g. "EU-DE"). | |
maxSessionTTL |
string | maxSessionTTL caps the lifetime of any session in this tier. | |
runtimeClassName |
string | yes | runtimeClassName is the Kubernetes RuntimeClass used for sandbox pods (e.g. gvisor, kata-fc, kata-qemu-snp). Min length: 1. |
sandboxTemplateName |
string | sandboxTemplateName optionally names an upstream agent-sandbox SandboxTemplate. When set, sessions are provisioned through a SandboxClaim (warm pool path) instead of a directly-created Sandbox. | |
warmPoolNamespaces |
[]string | warmPoolNamespaces lists the namespaces in which an upstream SandboxWarmPool (and the referenced SandboxTemplate) live. Upstream warm pools and templates are namespaced while TrustTier is cluster-scoped; defaults to the operator's --warmpool-namespace flag when empty. | |
warmPoolSize |
integer (int32) | warmPoolSize is the number of pre-warmed sandboxes to keep per warm-pool namespace. Only effective when sandboxTemplateName is set. Minimum: 0. |
Status fields#
TrustTierStatus is the observed state of a TrustTier.
The operator writes status; do not set it yourself.
| Field | Type | Required | Description |
|---|---|---|---|
conditions |
[]object | ||
conditions[].lastTransitionTime |
string (date-time) | yes | lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. |
conditions[].message |
string | yes | message is a human readable message indicating details about the transition. This may be an empty string. Max length: 32768. |
conditions[].observedGeneration |
integer (int64) | observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. Minimum: 0. |
|
conditions[].reason |
string | yes | reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. Min length: 1. Max length: 1024. Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$. |
conditions[].status |
string | yes | status of the condition, one of True, False, Unknown. One of: True, False, Unknown. |
conditions[].type |
string | yes | type of condition in CamelCase or in foo.example.com/CamelCase. Max length: 316. Pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$. |
observedGeneration |
integer (int64) | ||
warmPoolReady |
integer (int32) | warmPoolReady is the sum of ready replicas across this tier's warm pools. |