License
Ambito: cluster · Singleton (deve chiamarsi cluster)
Contiene e convalida la licenza offline firmata ed espone l'insieme delle funzionalità abilitate e i limiti di istanze a tutti gli altri controller. Le licenze si ottengono — scaricate, acquistate o avviate come prova — dal portale clienti Navique su portal.navique.dev. Per il modello di licenza, vedi Edizioni e licenze e Gestire una licenza.
Spec
| Campo | Tipo | Descrizione |
|---|---|---|
secretRef | SecretKeyRef (obbligatorio) | Secret che contiene il token di licenza firmato. Chiave predefinita license. |
apiVersion: core.navique.com/v1alpha1
kind: License
metadata:
name: cluster # singleton — other names are rejected
spec:
secretRef:
name: navique-license
key: license
namespace: navique-systemStatus
| Campo | Descrizione |
|---|---|
valid | Se il token è stato verificato e non è scaduto |
licensee | Nome del titolare della licenza |
tier | Etichetta di comodo (enterprise / basic / …); non usata per l'applicazione dei limiti |
expiresAt | Data e ora di scadenza |
environment | prod / nonprod |
enabledFeatures | Feature flag esplicite, ad es. ["auto-wiring","guardrail"] |
limits | Limiti applicati per tipo, ad es. {"gateways":3,"langfuse":1} |
includedSupportHours | Solo a titolo di riferimento; conteggiate al di fuori del cluster |
reason | Perché la licenza non è valida, se applicabile |
revoked | true se il token è stato rifiutato dalla lista di revoca integrata nell'operatore |
revokedReason | Categoria della revoca quando revoked è true: compromised / superseded / non-compliance / issued-in-error / unspecified |
conditions | Include Ready (reason LicenseRevoked in caso di revoca) |
Come funziona la verifica
La licenza è un JWT firmato verificato rispetto a una chiave pubblica compilata nel binario dell'operatore (algoritmo consigliato: EdDSA / Ed25519; alg: none viene rifiutato). L'operatore seleziona la chiave di verifica in base all'header kid (key id) del token, così la chiave di firma può essere ruotata senza invalidare le licenze già emesse. Non c'è alcun server di licenze né alcun phone-home, quindi funziona anche in ambienti air-gapped. Il controller:
- Legge il token dal Secret referenziato e ne verifica firma e scadenza.
- Confronta il token con la lista di revoca integrata nell'operatore (vedi Revoca).
- Scrive lo
status(validità, titolare, tier, scadenza, funzionalità, limiti, ambiente, reason, revoca) e una conditionReady. - Pubblica i diritti in un valutatore sicuro per la concorrenza che ogni controller di workload legge.
- Riaccoda la riconciliazione in prossimità della scadenza, così i controlli cambiano stato puntualmente.
Il controller osserva il Secret referenziato, quindi attivare una nuova licenza sovrascrivendo il token sul posto (lo stesso secretRef — è così che la console di gestione ne attiva una) viene recepito immediatamente; non è necessario modificare o riapplicare la CR License. A sua volta, ogni controller soggetto a licenza osserva la License, quindi un upgrade o un downgrade rivaluta tempestivamente le istanze esistenti — un componente rifiutato con i diritti precedenti si ripristina non appena la nuova licenza viene verificata.
Revoca
Una licenza può essere revocata prima della scadenza — ad esempio se il suo token è trapelato o è stato emesso per errore. L'operatore include una lista di revoca compilata nel binario, quindi funziona completamente in ambienti air-gapped, senza alcun controllo online. Una licenza revocata viene rifiutata anche se la sua firma è valida, e l'operatore ripiega sui valori predefiniti Community — esattamente come per una licenza scaduta, quindi la piattaforma di base continua a funzionare.
Quando una licenza è revocata, status.revoked è true, status.revokedReason riporta la categoria (ad es. compromised) e la condition Ready indica LicenseRevoked. Poiché la lista di revoca fa parte del binario dell'operatore, le revoche (e le correzioni di sicurezza distribuite insieme a esse) si ricevono mantenendo aggiornato l'operatore. Contatta Navique se una tua licenza risulta inaspettatamente revocata.
Diritti espliciti — nessun wildcard
La licenza contiene un elenco enumerato di features e limits quantitativi. Volutamente non esiste alcun diritto wildcard (["*"]) — ogni funzionalità e ogni numero di istanze è una leva di prezzo e viene applicato singolarmente.
{
"licensee": "ACME Bank AG",
"issuer": "Navique",
"tier": "enterprise",
"features": ["auto-wiring", "guardrail", "multi-tenancy", "sso-scim", "audit-logging"],
"limits": { "gateways": 3, "langfuse": 1, "chatui": 2, "teams": 10 },
"environment": "prod",
"includedSupportHours": 40,
"issued_at": "2026-06-01T00:00:00Z",
"expiration_date": "2027-06-01T00:00:00Z"
}Valori predefiniti Community (licenza assente / scaduta)
In assenza di una licenza valida — mai emessa o scaduta — l'operatore applica i valori predefiniti Community integrati e la piattaforma continua a funzionare:
- Le funzionalità a pagamento sono disattivate (il controllo del guardrail fallisce in modo chiuso).
- I limiti di istanze scendono al livello gratuito (una per tipo).
- La piattaforma di base non è interessata.
Si tratta di un downgrade graduale, non di un'interruzione del servizio. Vedi Edizioni e licenze.
Che cosa controlla
- Feature flag — ad es.
auto-wiring,guardrail,multi-tenancy,sso-scim,audit-logginge la famigliamanagement-plane-*utilizzata dalla console. - Limiti di istanze per tipo — la creazione dell'istanza N+1 oltre il limite della licenza viene rifiutata con una condition
LicenseLimitExceeded(non è trattata come un errore; le istanze esistenti continuano a funzionare).
La piattaforma di base non si blocca mai a causa della licenza — solo gli incrementi a pagamento sono soggetti a controllo, sempre con un'alternativa manuale o un chiaro percorso di rinnovo.