Skip to content

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 ​

ChampTypeDescription
secretRefSecretKeyRef (requis)Secret contenant le token de license signé. Clé par défaut license.
yaml
apiVersion: core.navique.com/v1alpha1
kind: License
metadata:
  name: cluster                      # singleton — other names are rejected
spec:
  secretRef:
    name: navique-license
    key: license
    namespace: navique-system

Status ​

ChampDescription
validIndique si le token a été vérifié et n'a pas expiré
licenseeNom de l'entité sous licence
tierLibellé de commodité (enterprise / basic / …) ; non utilisé pour l'application des règles
expiresAtHorodatage d'expiration
environmentprod / nonprod
enabledFeaturesFeature flags explicites, p. ex. ["auto-wiring","guardrail"]
limitsPlafonds appliqués par type, p. ex. {"gateways":3,"langfuse":1}
includedSupportHoursRéférence uniquement ; suivi hors cluster
reasonRaison de l'invalidité de la license, le cas échéant
revokedtrue si le token a été rejeté par la liste de révocation intégrée à l'opérateur
revokedReasonCatégorie de révocation lorsque revoked vaut true : compromised / superseded / non-compliance / issued-in-error / unspecified
conditionsInclut 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 :

  1. Lit le token depuis le Secret référencé et vérifie la signature et l'expiration.
  2. Vérifie le token par rapport à la liste de révocation intégrée à l'opérateur (voir Révocation).
  3. Écrit le status (validité, licensee, tier, expiration, fonctionnalités, limites, environnement, raison) ainsi qu'une condition Ready.
  4. Publie les droits vers un évaluateur thread-safe que lit chaque contrôleur de workload.
  5. 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.

json
{
  "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 famille management-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.

Cœur open source sous AGPL-3.0. Les composants Enterprise sont propriétaires et soumis à licence.