Dans Kubernetes, nous pouvons stocker et gérer des informations sensibles, telles que des mots de passe, des jetons OAuth et des clés ssh à l'aide des secrets Kubernetes. Dans Kubernetes, les secrets peuvent être définis comme des objets Kubernetes. Il est plus sûr de stocker les informations d'identification dans les secrets Kubernetes que dans les pods ou dans les images Docker.
Il existe plusieurs façons de générer des secrets dans Kubernetes :
- Création à partir d'un fichier texte
- Créer à partir d'un fichier yml
Une fois les secrets disponibles, ils peuvent être utilisés des manières suivantes :
- Variable d'environnement
- Volume
- Utilisation du champ imagePullSecrets
Pour en savoir plus sur les secrets Kubernetes, cliquez ici.
Dans cet article, nous allons créer des secrets à l'aide du fichier .yml et y accéder dans le pod en tant que variables d'environnement.
Prérequis
- Cluster Kubernetes avec au moins 1 nœud de travail.
Si vous souhaitez apprendre à créer un cluster Kubernetes, cliquez ici. Ce guide vous aidera à créer un cluster Kubernetes avec 1 maître et 2 nœuds sur les instances AWS Ubuntu 18l04 EC2.
Ce que nous allons faire
- Créer des secrets
Créer des secrets
Pour créer de nouveaux secrets dans Kubernetes, chiffrez-les d'abord comme indiqué ci-dessous à l'aide de la méthode d'encodage base64.
Ici,
nom d'utilisateur=rahul et mot de passe=howtoforge123.
echo -n "rahul" | base64
echo -n "howtoforge123" | base64
Dans la capture d'écran ci-dessus, on peut voir que les informations d'identification ont été chiffrées.
Créez un fichier de définition secret comme suit, ce fichier contient la valeur base64 des informations d'identification générées à l'étape ci-dessus.
vim mon-secret.yml
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: cmFodWw= password: aG93dG9mb3JnZTEyMw==
Maintenant, créons un pod dans lequel ces secrets et sont accessibles.
Créez un nouveau fichier qui contiendra la définition de pod comme suit.
vim mon-pod.yaml
apiVersion: v1 kind: Pod metadata: name: secrets-in-pod spec: containers: - name: my-container image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never
Créons des secrets à l'aide de la commande suivante.
kubectl create -f mon-secret.yml
kubectl devient secret | grep monsecret
Maintenant, créez un pod en utilisant la définition de pod suivante pour accéder aux secrets créés précédemment.
kubectl create -f mon-pod.yml
kubectl get pods | grep secrets-dans-pod
Connectez-vous au pod à l'aide de la commande suivante.
kubectl obtenir des pods | grep secrets-dans-pod
kubectl exec -it secrets-in-pod /bin/bash
Une fois connecté au pod, les secrets sont accessibles en tant que variable d'environnement à l'aide de la commande suivante.
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
Dans la capture d'écran ci-dessus, on peut voir que les secrets sont disponibles en tant que variables d'environnement.
Pour voir les détails de l'objet secret, exécutez la commande suivante.
kubectl devient secret | grep monsecret
kubectl get secret mysecret -o yaml
Ces secrets peuvent également être décodés depuis la ligne de commande à l'aide des commandes suivantes.
kubectl get secrets/mysecret --template={{.data.username}} | base64 -d
kubectl get secrets/mysecret --template={{.data.password}} | base64 -d
Dans la capture d'écran ci-dessus, on peut voir que les identifiants sont extraits des secrets et déchiffrés sur la ligne de commande à l'aide de base64.
Conclusion
Dans cet article, nous avons vu les étapes pour créer et stocker des secrets dans Kubernetes à partir d'un fichier .yml. Nous avons essayé d'accéder à ces secrets dans Pod en tant que variables d'environnement. Nous avons également vu la commande pour déchiffrer les secrets sur la ligne de commande.