Aller au contenu principal

Variables et secrets

Disponible

Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.

Un service reçoit ses réglages par variables d'environnement : une valeur écrite dans le manifeste, ou une clé d'un Secret pour tout ce qui est confidentiel. Les Secrets ne sont jamais dans le manifeste ; vous les créez à part et l'App les référence par leur nom.

Prérequis​

Étapes​

1. Déclarer les variables​

api.yml
apiVersion: deploy.stackngo.io/v1alpha1
kind: App
metadata:
name: api
spec:
imagePullSecrets: [gitlab-registry] # pour tirer l'image privée
services:
api:
image: registry.gitlab.com/acme/api:1.2.0
ports: ["8080"]
env:
LOG_LEVEL: info # chaîne
WORKERS: 4 # nombre → "4"
DEBUG: false # booléen → "false"
DB_PASSWORD: { secret: db, key: password } # clé password du Secret db
envFrom: [api-env] # toutes les clés du Secret api-env

Équivalent en ligne de commande, pour une App à un service :

sng app create api --image registry.gitlab.com/acme/api:1.2.0 --port 8080 \
--env LOG_LEVEL=info --env WORKERS=4 --env DEBUG=false \
--env-secret DB_PASSWORD=db:password --env-from api-env \
--image-pull-secret gitlab-registry

2. Créer les Secrets référencés​

Créez gitlab-registry (type docker-registry), db (avec une clé password) et api-env sur votre tenant : Injection dans une App. L'ordre n'a pas d'importance, l'App attend.

3. Appliquer et vérifier l'état​

sng apply api.yml
sng app describe api

Tant qu'un Secret manque, l'état le dit :

App : api
Statut : en cours
Message : api : Secrets absents (…) : api-env
SERVICE KIND IMAGE PHASE URL DETAIL
api deployment registry.gitlab.com/acme/api:1.2.0 Progressing - SecretNotFound Secrets absents (…) : api-env

Dès que le Secret existe, le service démarre sans autre action, en quelques minutes.

Vérification​

sng app describe api affiche Statut : prête. sng app logs api montre l'application démarrée avec ses réglages.

Modifier une variable après coup​

sng app patch api --env LOG_LEVEL=debug # ajoute ou remplace
sng app patch api --env-secret SMTP_PASSWORD=smtp:password
sng app patch api --unset-env DEBUG # retire

Chaque patch met à jour le manifeste et déclenche une mise à jour progressive du service. Pour une App à plusieurs services, ajoutez --service <nom>.

Les formes de env​

FormeExempleCe que reçoit le conteneur
chaîneLOG_LEVEL: infoLOG_LEVEL=info
nombreWORKERS: 4WORKERS=4
booléenDEBUG: falseDEBUG=false
référenceDB_PASSWORD: { secret: db, key: password }la valeur de la clé password du Secret db, lue au démarrage du conteneur
null ou videHOME_DIR:refusé : écrivez HOME_DIR: ""

Règles : 100 variables au plus par service ; nom de la forme ^[A-Za-z_][A-Za-z0-9_.-]*$ ; secret et key sont tous deux requis dans une référence. Aucune interpolation : ${VAR} est transmis tel quel.

envFrom : un Secret entier​

envFrom: [api-env] transforme chaque clé des Secrets listés (10 au plus) en variable. C'est la traduction naturelle d'un env_file compose. En cas de doublon entre env et envFrom, la valeur de env l'emporte (comportement standard des conteneurs).

imagePullSecrets : images privées​

  • spec.imagePullSecrets s'applique à tous les services.
  • services.<nom>.imagePullSecrets remplace cette liste pour un service ; [] signifie « aucun » (utile pour une image publique à côté d'images privées).
  • Un Secret de registre absent bloque le service (Waiting, ImagePullSecretNotFound) : rien n'est démarré tant qu'il manque, et la plateforme re-vérifie toutes les 30 secondes. Créez-le : le service démarre dans la demi-minute qui suit.

Pour aller plus loin​

  • La plateforme vérifie seulement l'existence des Secrets référencés ; elle n'en lit jamais le contenu.
  • Un secret référencé par env ou envFrom qui n'existe pas encore est créé pour vous, en attente, sans valeur : il apparaît dans sng secret list. Posez sa valeur avec sng secret set et le service démarre (Injecter un secret dans une App).
  • Un secret compose monté en fichier (secrets:) n'a pas d'équivalent : passez par une variable {secret, key}.
  • Les noms de Secrets sont des sous-domaines DNS (minuscules, chiffres, -, .).

Voir aussi​