Kubernetes - ConfigMap
Alasta 22 Août 2024 kubernetes kubernetes pod configmap secret
Description : Kubernetes, les configMaps
Kubernetes - Les configMaps
Le manifest d’un pod permet de positionner des variables d’environnements.
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp-color
spec:
containers:
- name: simple-webapp-color
image: mmumshad/simple-webapp-color
ports:
- containerPort: 8080
env:
- name: APP_COLOR
value: blue
- name: APP_MODE
value: prod
Une bonne pratique est d’externaliser cette configuration, une configMap permet cela dans kubernetes.
Création d’une configMap
Via un manifest configMap
apiVersion: v1
kind: ConfigMap
metadata:
name: color-configmap
data:
APP_COLOR: red
APP_MODE: dev
Via la CLI
kubectl create configmap <config-name> --from-literal=<key>=<value>
kubectl create configmap color-configmap-cli --from-literal=APP_COLOR=red --from-literal=APP_MODE=dev
Via la CLI avec un fichier
file-configmap-def.txt
APP_COLOR=yellow
APP_MODE=staging
kubectl create configmap color-configmap-cli-file --from-file=./file-configmap-def.txt
Utilisation dans un pod
Il existe 2 méthodes pour utiliser un configMap dans un pod
Méthode 1
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp-color-env-configmap
spec:
containers:
- name: simple-webapp-color
image: mmumshad/simple-webapp-color
ports:
- containerPort: 8080
env:
- name: APP_COLOR
valueFrom:
configMapKeyRef:
name: color-configmap
key: APP_COLOR
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: color-configmap
key: APP_MODE
Note: on sélectionne les variables que l’on souhaite utiliser.
Méthode 2
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp-color-envfrom-configmap
spec:
containers:
- name: simple-webapp-color
image: mmumshad/simple-webapp-color
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: color-configmap
Note: plus simple car on référence que la confiMap et on récupère toutes les variables.
ConfigMap fichier
En plus des variables, les configMaps permettent aussi des fichiers comme un certificat.
kubectl create configmap my-ca-configmap --from-file ca.crt
kubectl get configmap my-ca-configmap -o yaml
apiVersion: v1
kind: ConfigMap
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
kL5lkjKsA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsUos7lBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qa==
-----END CERTIFICATE-----
Note: avec l’option –from-file il est possible de mettre un dossier au lieu d’un fichier pour charger tous les fichiers de ce dossier.
Dans ce cas on n’utilise pas cela comme une variable mais on monte cela dans un volume au niveau du pod.
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp-color-envfrom-configmap
spec:
containers:
- name: simple-webapp-color
image: mmumshad/simple-webapp-color
ports:
- containerPort: 8080
volumeMounts:
- name: config-volume <--- ref au volume
mounthPath: /etc/certs
volumes:
- name: config-volume <--- nom du volume
config-Map:
name: my-ca-configmap <--- configMap crée précédement
Kubernetes - Les secrets
Les secrets ne sont pas différent des configMaps sauf que le contenu est “masquée à l’affichage” (codé en base64) et peut être un binaire.
Secret à protéger
echo "my-very-secret" | base64
bXktdmVyeS1zZWNyZXQK
Création du secret
apiVersion: v1
data:
password: bXktdmVyeS1zZWNyZXQK
kind: Secret
metadata:
name: my-secret
Lister les secrets:
k get secrets
NAME TYPE DATA AGE
my-secret Opaque 1 4s
Voir le contenu:
k get secrets my-secret -o yaml
apiVersion: v1
data:
password: bXktdmVyeS1zZWNyZXQK
kind: Secret
metadata:
creationTimestamp: "2024-08-22T21:13:03Z"
name: my-secret
namespace: default
resourceVersion: "41356"
uid: 673ea79d-2448-4179-b026-1089b952573b
type: Opaque
Valider le secret
echo "bXktdmVyeS1zZWNyZXQK" | base64 -d
my-very-secret
Tout comme les configMaps les secrets peut être utilisé en variable ou fichier (via le volume), il y a même la possibilité de lui donner des droits d’accès sur le fichier.