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.