configmaps e secrets

in Architetture Software, Informatica

Kubernetes ConfigMaps e Secrets

Reading Time: 2 minutes

E’ buona norma implementare container in modo che siano il piu’ possibile utilizzabili. Spesso le stesse immagini sono utilizzate per gli ambienti di sviluppo, staging e produzione. In questo scenario Kubernetes mette a disposizione ConfigMaps e Secrets per condividere informazioni, variabili e dati “sensibili” tra container.

ConfigMaps sono utilizzati per condividere parametri e variabili di configurazione tra containers. Consentono di definire semplice variabili testuali ma anche variabili più articolate.

Secrets sono molto simili a ConfigMaps, ma hanno il compito di memorizzare e rendere disponibili informazioni contententi dati “sensibili” come password e certificati.

ConfigMaps

ConfigMaps può essere pensato come un semplice filesystem all’interno dell’ambiente Kubernetes. Inoltre, ConfigMaps per poter funzionare è strettamente legato al Pod. In pratica, l’immagine del container e la definzione del pod sono strettamente legati e possono essere riutilizzate in app differenti semplicemente modificando le configurazioni all’interno del ConfigMaps.

Supponiamo di avere un file .txt con all’interno una serie di coppie key/value. Vogliamo rendere disponibile il contenuto delle variabili all’interno di un Pod.

variable1 = value1
variable2 = value2

Per creare il ConfigMaps si può usare il comando:

> kubectl create configmap my-configuration --from-file=myfile.txt --from-literal=extra-param=extra-value

Il comando precedente crea un ConfigMaps a partire dal contenuto del file di testo e, inoltre, definisce una nuova variabile chiamata extra-param contenente il valore extra-value. E’ possibile esportare la configurazione in formato yaml con il comando:

> kubectl get configmaps my-configuration -o yaml

ConfigMaps possono essere utilizzati in 3 modi differenti:

  • Filesystem: ConfigMaps può essere montato all’interno del Pod. Il meccanismo di mount crea un file per ogni coppia chiave/valore. Ogni file creato ha il nome uguale a quello della chiave, con il contenuto uguale al valore
  • Enviroment variable: ConfigMaps può essere utilizzato dinamicamente per settare il valore di una variabile di configurazione
  • Command-line arguments: kubernetes supporta l’utilizzo di command line che accetta parametri definiti all’interno di ConfigMaps

Secrets

ConfigMaps consentono di definire variabili con informazioni condivise, ma spesso abbiamo la necessità di utilizzare variabili contententi informazioni sensibili. Secrets servono proprio a questo scopo. Possono includere password, security tokens e altre informazioni che devono essere mantenuti private, ma al tempo stesso accessibili.

kubectl create secret generic my-secret --from-file=path/to/bar

Con il comando precedente viene creato un nuovo Secrets chiamato my-secret che definisce le variabili a partire dai file presenti all’interno del percorso indicato.

Gestione di ConfigMaps e Secrets

Come tutti gli object di kubernetes è possibile utilizzare i comandi get, describe, create:

> kubectl get secrets
> kubectl get configmaps
> kubectl describe configmaps CONFIG_OBJ

ConfigMaps e Secrets consentono di definire una configurazione dinamica per le applicazioni. Consentono di creare un container e relativo POD una volta e riutilizzarli all’interno di contesti differenti.