3 minutes
K8S Chap. 6 - ConfigMaps et secrets
Configmaps
Les configmaps permettent de spécifier des petites données de configuration sans avoir à monter un volume spécifique.
Ces données sont sockées sous la forme de clés/valeur dans un fichier.
Elles peuvent ensuite être récupérées par le Pod en tant que variable d’environnement ou dans un répertoire.
Limitations :
- Pas de chiffrement : Ne pas mettre d’information sensible, utiliser les
secrets
Kubernetes pour ça - Taille : Une donnée est limitée à 1Mo
Exemple de données stockées en configmap
Un exemple avec différents types de données :
# my-configs.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configs
data:
# Les données sont stockées sous la forme clé: valeur
my-string: "Hello World"
my-number: "123"
my-boolean: "true"
my-multiline-value: |
Here you can store multiline configs
like little config files
but the limit is 1MB
my-list: |
- first
- second
- third
On l’applique avec kubectl
k apply -f my-configs.yaml
Et on regarde si on voit bien les données :
k get configmap my-configs
k describe configmap my-configs
k get configmap my-configs -o jsonpath='{.data.my-list}'
Utilisation de configmap dans un Pod
Il y a deux méthodes pour voir les données dans le Pod :
- Monter un volume dans un répertoire du Pod
- Passer les secrets en variable d’environnement
Avec un volume :
# pod-config-vars.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: ubuntu
command: ["sleep", "infinity"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-configs
restartPolicy: Never
Dans le pod, on peut voir les valeurs dans /etc/config
:
k exec -it test-pod -- ls /etc/config
k exec -it test-pod -- cat /etc/config/my-string
Avec des variables d’environnement :
# pod-env-vars.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: ubuntu
command: ["sleep", "infinity"]
env:
- name: CONFIG_STRING
valueFrom:
configMapKeyRef:
name: my-configs
key: my-string
- name: CONFIG_NUMBER
valueFrom:
configMapKeyRef:
name: my-configs
key: my-number
Dans le pod, on peut voir les secrets en affichant les variables d’environnement :
k exec my-pod -- env |grep CONFIG_
Secrets
Les secrets fonctionnent sur le même principe que les configsmaps mais ils sont stockés de manière chiffrée. De plus, quand Kubernetes, les affiche c’est en Base64.
Création et manipulation de secrets
Créer simplement un secret en CLI
kubectl create secret generic my-secret \
--from-literal=username=admin \
--from-literal=password='chiefee4Aitaiphi'
Ou avec un fichier Yaml :
D’abord on récupère les données en base64 :
echo "admin" | base64 # Donne YWRtaW4K
echo "chiefee4Aitaiphi" | base64 # Donne Q29oVzlFaW1pZWo3dmFpNwo=
Puis on les écrit dans le fichier Yaml
# mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
# A injecter en Base64
username: YWRtaW4K
password: Q29oVzlFaW1pZWo3dmFpNwo=
Et on injecte le fichier :
k apply -f mysecret.yaml
On peut ensuite les voir (en base64) :
k get secrets my-secret
k describe secrets/my-secret
k get secrets my-secret -o jsonpath='{.data}'
Reste à décoder la donnée en base64
echo "[donnée en base64]" |base64 -d
Utilisation de secrets dans un Pod
Il y a deux méthodes pour voir les secrets dans le Pod :
- Monter un volume dans un répertoire du Pod
- Passer les secrets en variable d’environnement
Avec un volume :
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: ubuntu
command: ["sleep", "infinity"]
volumeMounts:
- name: my-secret
mountPath: "/etc/my-secret"
readOnly: true
volumes:
- name: my-secret
secret:
secretName: my-secret
Dans le pod, on peut voir les secrets dans /etc/my-secret
:
k exec -it test-pod -- cat /etc/my-secret/username /etc/my-secret/password
Avec des variables d’environnement :
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: ubuntu
command: ["sleep", "infinity"]
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
Dans le pod, on peut voir les secrets en affichant les variables d’environnement :
k exec -it test-pod -- env |grep SECRET_
# echo $SECRET_USERNAME $SECRET_PASSWORD