Skip to content

API

Primary Resource

  • API group: kleym.sonda.red
  • Version: v1alpha1
  • Kind: InferenceIdentityBinding
  • Scope: namespaced

InferenceIdentityBinding expresses identity intent for a single InferencePool. It drives reconciliation of managed ClusterSPIFFEID resources.

External Gateway API Inference Extension (GAIE) schema references:

External SPIFFE/SPIRE references:

Spec Fields

FieldRequiredNotes
poolRef.nameYesReferences an InferencePool in the same namespace.
poolRef.groupNoConstrains pool resolution to inference.networking.k8s.io.
serviceAccountNameYesAdmission-validated DNS-1123 subdomain Kubernetes service account required in every rendered identity selector set.
identityBoundary.variantYesValid, nonempty Kubernetes label value rendered under the fixed identity.kleym.sonda.red/variant key.

Current validation rules enforced by the CRD:

  • poolRef.name is required.
  • poolRef.group, when set, must be inference.networking.k8s.io.
  • serviceAccountName is required and admission-validated as a DNS-1123 subdomain with a maximum length of 253 characters.
  • identityBoundary.variant is required and must be a nonempty Kubernetes label value.

Status Fields

FieldMeaning
conditionsLatest controller observations.
trustDomainOperator trust domain used for the latest status update.
clusterSPIFFEIDClassNameOptional operator ClusterSPIFFEID class name used for the latest status update. Empty means classless output.
conflictsDeterministically sorted peer binding names, causes, SPIFFE IDs, and variants. Present only for Conflict=True.
computedSpiffeIDsComputed SPIFFE IDs produced from the pool binding.
renderedSelectorsFinal selector set used for each rendered identity.
pendingClusterSPIFFEID.nameDeterministic managed-output name durably reserved before Create.
pendingClusterSPIFFEID.claimIDController-generated correlation token copied to the new object’s kleym.sonda.red/ownership-claim-id annotation for safe ambiguous-create recovery.
ownedClusterSPIFFEID.nameDeterministic name of the confirmed managed-output incarnation.
ownedClusterSPIFFEID.uidKubernetes UID of the exact confirmed incarnation authorized for update or deletion.
renderedClusterSPIFFEID.nameDeterministic managed ClusterSPIFFEID name rendered for the binding.
renderedClusterSPIFFEID.spiffeIDRendered SPIFFE ID written to the managed ClusterSPIFFEID. This matches the SPIFFE ID in computedSpiffeIDs.
renderedClusterSPIFFEID.selectorFingerprintsha256:<hex> fingerprint of the canonical rendered selector set.
renderedClusterSPIFFEID.observedGenerationObserved metadata.generation of the managed ClusterSPIFFEID when Kubernetes reports a persisted generation. Omitted when no persisted generation has been reported.

On reference, selector, render, managed-output infrastructure, or managed-output API failure, the operator clears computedSpiffeIDs, renderedSelectors, and renderedClusterSPIFFEID together so status-only clients do not read stale rendered output. Generic managed ClusterSPIFFEID read, create, update, or delete API failures report RenderFailure=True with reason ManagedOutputApplyFailed. Pending and confirmed ownership survive transient API failures. NotFound clears a recorded incarnation; a missing or different pending claim or confirmed UID marks a live same-name object foreign and leaves it untouched.

Kubectl Columns

kubectl get inferenceidentitybindings.kleym.sonda.red shows these CRD printer columns for compact binding overviews:

ColumnSource
POOLspec.poolRef.name
BOUNDARYspec.identityBoundary.variant
READYstatus.conditions[Ready].status
REASONstatus.conditions[Ready].reason
SPIFFE IDstatus.computedSpiffeIDs[0].spiffeID

Use -A to list bindings across namespaces. The BOUNDARY column is available from spec before reconciliation; other status-derived columns remain empty until the operator has reconciled the binding and written status.

Current Defaults

The controller always renders deterministic service-account-scoped inference target SPIFFE IDs under its configured trust domain:

spiffe://<trustDomain>/ns/<namespace>/sa/<serviceAccountName>/inference/pool/<pool-name>/variant/<variant>

The variant is part of the identity path and is rendered under the fixed identity.kleym.sonda.red/variant selector key.

External Objects Resolved

The controller resolves InferencePool from the supported GAIE GVK. See GAIE Compatibility for the consumed fields, group-constrained reference behavior, and startup discovery rules.

Last updated on