License
Portée : cluster · Singleton (doit être nommé cluster)
Détient et valide la license hors ligne signée, et expose à tous les autres contrôleurs l'ensemble des fonctionnalités activées ainsi que les plafonds d'instances. Les licences s'obtiennent — téléchargées, achetées ou démarrées en essai — sur le portail client Navique à l'adresse portal.navique.dev. Pour le modèle de licensing, voir Éditions et licensing et Gérer une license.
Spec
| Champ | Type | Description |
|---|---|---|
secretRef | SecretKeyRef (requis) | Secret contenant le token de license signé. Clé par défaut 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
| Champ | Description |
|---|---|
valid | Indique si le token a été vérifié et n'a pas expiré |
licensee | Nom de l'entité sous licence |
tier | Libellé de commodité (enterprise / basic / …) ; non utilisé pour l'application des règles |
expiresAt | Horodatage d'expiration |
environment | prod / nonprod |
enabledFeatures | Feature flags explicites, p. ex. ["auto-wiring","guardrail"] |
limits | Plafonds appliqués par type, p. ex. {"gateways":3,"langfuse":1} |
includedSupportHours | Référence uniquement ; suivi hors cluster |
reason | Raison de l'invalidité de la license, le cas échéant |
revoked | true si le token a été rejeté par la liste de révocation intégrée à l'opérateur |
revokedReason | Catégorie de révocation lorsque revoked vaut true : compromised / superseded / non-compliance / issued-in-error / unspecified |
conditions | Inclut Ready (raison LicenseRevoked en cas de révocation) |
Fonctionnement de la vérification
La license est un JWT signé vérifié par rapport à une clé publique compilée dans le binaire de l'opérateur (algorithme recommandé : EdDSA / Ed25519 ; alg: none est rejeté). L'opérateur sélectionne la clé de vérification d'après l'en-tête kid (key id) du token, de sorte que la clé de signature peut être renouvelée sans invalider les licenses déjà émises. Il n'existe aucun serveur de license ni phone-home, ce qui permet un fonctionnement en environnement air-gapped. Le contrôleur :
- Lit le token depuis le Secret référencé et vérifie la signature et l'expiration.
- Vérifie le token par rapport à la liste de révocation intégrée à l'opérateur (voir Révocation).
- Écrit le
status(validité, licensee, tier, expiration, fonctionnalités, limites, environnement, raison) ainsi qu'une conditionReady. - Publie les droits vers un évaluateur thread-safe que lit chaque contrôleur de workload.
- Replanifie un requeue à l'approche de l'expiration afin que la gouvernance bascule à temps.
Le contrôleur surveille le Secret référencé : activer une nouvelle licence en écrasant le token en place (le même secretRef — la façon dont la console d'administration en active une) est pris en compte immédiatement ; nul besoin de modifier ni de réappliquer la CR License. Chaque contrôleur soumis à licence surveille à son tour la License, de sorte qu'une montée ou une baisse de gamme réévalue promptement les instances existantes — un composant refusé sous les anciens droits se rétablit dès que la nouvelle licence est vérifiée.
Révocation
Une license peut être révoquée avant son expiration — par exemple si son token fuite ou s'il a été émis par erreur. L'opérateur embarque une liste de révocation compilée dans le binaire, ce qui fonctionne donc entièrement en environnement air-gapped, sans aucune vérification en ligne. Une license révoquée est rejetée même si sa signature est valide, et l'opérateur retombe sur les valeurs par défaut Community — exactement comme pour une license expirée, de sorte que la plateforme de base continue de fonctionner.
Lorsqu'une license est révoquée, status.revoked vaut true, status.revokedReason porte la catégorie (p. ex. compromised), et la condition Ready signale LicenseRevoked. Comme la liste de révocation fait partie du binaire de l'opérateur, vous récupérez les révocations (et les correctifs de sécurité livrés avec elles) en maintenant l'opérateur à jour. Contactez Navique si l'une de vos licenses apparaît révoquée de manière inattendue.
Droits explicites — aucun wildcard
La license porte une liste features énumérée et des limits quantitatives. Il n'existe délibérément aucun droit de type wildcard (["*"]) — chaque fonctionnalité et chaque nombre d'instances constitue un levier de tarification appliqué individuellement.
{
"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"
}Valeurs par défaut Community (license absente / expirée)
En l'absence de license valide — jamais émise, ou expirée — l'opérateur applique les valeurs par défaut Community intégrées et la plateforme continue de fonctionner :
- Fonctionnalités payantes désactivées (le gate guardrail échoue en mode fermé).
- Les plafonds d'instances retombent au niveau gratuit (une de chaque type).
- La plateforme de base n'est pas affectée.
Il s'agit d'une dégradation gracieuse, pas d'une interruption de service. Voir Éditions et licensing.
Ce qu'elle gouverne
- Feature flags — p. ex.
auto-wiring,guardrail,multi-tenancy,sso-scim,audit-logging, ainsi que la famillemanagement-plane-*consommée par la console. - Plafonds d'instances par type — la création de l'instance N+1 au-delà de la limite sous licence est refusée avec une condition
LicenseLimitExceeded(cela n'est pas traité comme une erreur ; les instances existantes continuent de fonctionner).
La plateforme de base ne se bloque jamais sur la license — seuls les incréments payants sont gouvernés, toujours avec un mécanisme de repli manuel ou un chemin de renouvellement clair.