Gestion des secrets avec kubectl

Créer des Secrets via la ligne de commande kubectl.

Cette page vous montre comment créer, éditer, gérer et supprimer des Secrets Kubernetes en utilisant l'outil de ligne de commande kubectl.

Pré-requis

Vous devez disposer d'un cluster Kubernetes et l'outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster. Si vous ne possédez pas déjà de cluster, vous pouvez en créer un en utilisant Minikube, ou vous pouvez utiliser l'un de ces environnements Kubernetes:

Créer un Secret

Un objet Secret stocke des données sensibles telles que des informations d'identification utilisées par des Pods pour accéder à des services. Par exemple, vous pourriez avoir besoin d'un Secret pour stocker le nom d'utilisateur et le mot de passe nécessaires pour accéder à une base de données.

Vous pouvez créer le Secret en passant les données brutes dans la commande, ou en stockant les informations d'identification dans des fichiers que vous transmettez à la commande. Les commandes suivantes créent un Secret qui stocke le nom d'utilisateur admin et le mot de passe S!B\*d$zDsb=.

Utiliser des données brutes

Exécutez la commande suivante :

kubectl create secret generic db-user-pass \
    --from-literal=username=admin \
    --from-literal=password='S!B\*d$zDsb='

Vous devez utiliser des guillemets simples '' pour échapper les caractères spéciaux tels que $, \, *, =, et ! dans vos chaînes de caractères. Sinon, votre shell interprétera ces caractères.

Utiliser des fichiers sources

  1. Stockez les informations d'identification dans des fichiers :

    echo -n 'admin' > ./username.txt
    echo -n 'S!B\*d$zDsb=' > ./password.txt
    

    L'argument -n garantit que les fichiers générés n'ont pas de saut de ligne supplémentaire à la fin du texte. C'est important car lorsque kubectl lit un fichier et encode le contenu dans une chaîne base64, le saut de ligne supplémentaire sera également encodé. Vous n'avez pas besoin d'échapper les caractères spéciaux dans les chaînes que vous incluez dans un fichier.

  2. Passez les chemins des fichiers dans la commande kubectl :

    kubectl create secret generic db-user-pass \
        --from-file=./username.txt \
        --from-file=./password.txt
    

    Par défaut, le nom de la clé sera le nom du fichier. Vous pouvez éventuellement définir le nom de la clé en utilisant --from-file=[key=]source. Par exemple :

    kubectl create secret generic db-user-pass \
        --from-file=username=./username.txt \
        --from-file=password=./password.txt
    

Avec l'une ou l'autre méthode, le résultat est similaire à :

secret/db-user-pass created

Vérifier le Secret

Vérifiez que le Secret a été créé :

kubectl get secrets

Le résultat est similaire à :

NAME              TYPE       DATA      AGE
db-user-pass      Opaque     2         51s

Affichez les détails du Secret :

kubectl describe secret db-user-pass

Le résultat est similaire à :

Name:            db-user-pass
Namespace:       default
Labels:          <none>
Annotations:     <none>

Type:            Opaque

Data
====
password:    12 bytes
username:    5 bytes

Les commandes kubectl get et kubectl describe n'affichent pas le contenu d'un Secret par défaut. Cela protège le Secret contre une exposition accidentelle, ou d'être stocké dans un historique de terminal.

Décoder le Secret

  1. Affichez le contenu du Secret que vous avez créé :

    kubectl get secret db-user-pass -o jsonpath='{.data}'
    

    Le résultat est similaire à :

    { "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
    
  2. Décodez les données de password :

    echo 'UyFCXCpkJHpEc2I9' | base64 --decode
    

    Le résultat est similaire à :

    S!B\*d$zDsb=
    
    kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
    

Modifier un Secret

Vous pouvez éditer un objet Secret existant sauf s'il est immuable. Pour éditer un Secret, exécutez la commande suivante :

kubectl edit secrets <secret-name>

Cela ouvre votre éditeur par défaut et vous permet de mettre à jour les valeurs base64 encodées du Secret dans le champ data, comme dans l'exemple suivant :

# Éditez l'objet ci-dessous. Les lignes commençant par '#' seront ignorées,
# et un fichier vide interrompra l'édition. Si une erreur se produit lors de l'enregistrement du fichier, il sera
# re ouvert en affichant les erreurs.
#
apiVersion: v1
data:
  password: UyFCXCpkJHpEc2I9
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2022-06-28T17:44:13Z"
  name: db-user-pass
  namespace: default
  resourceVersion: "12708504"
  uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque

Nettoyer

Pour supprimer un Secret, exécutez la commande suivante :

kubectl delete secret db-user-pass

A suivre

Dernière modification January 22, 2024 at 1:38 PM PST: use french doc links when available (7bc3856b48)