In Kubernetes, possiamo archiviare e gestire informazioni sensibili, come password, token OAuth e chiavi ssh utilizzando Kubernetes Secrets. In Kubernetes, i segreti possono essere definiti come oggetti Kubernetes. È più sicuro archiviare le credenziali in Kubernetes Secrets che nei Pod o nelle Docker Images.
Ci sono diversi modi per generare segreti in Kubernetes:
- Creazione da un file di testo
- Creazione da un file yml
Una volta che i segreti sono disponibili, possono essere utilizzati nei seguenti modi:
- Variabile d'ambiente
- Volume
- Utilizzo del campo imagePullSecrets
Per saperne di più su Kubernetes Secrets, fai clic qui.
In questo articolo creeremo segreti utilizzando il file .yml e accederemo ad essi nel Pod come variabili d'ambiente.
Prerequisiti
- Cluster Kubernetes con almeno 1 nodo di lavoro.
Se vuoi imparare a creare un Cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18l04 EC2.
Cosa faremo
- Crea segreti
Crea segreti
Per creare nuovi segreti in Kubernetes, prima crittografali come mostrato di seguito usando il metodo di codifica base64.
Qui,
nomeutente=rahul e password=howtoforge123.
echo -n "rahul" | base64
echo -n "howtoforge123" | base64

Nello screenshot sopra, si può vedere che le credenziali sono state crittografate.
Crea un file di definizione del segreto come segue, questo file contiene il valore base64 delle credenziali generate nel passaggio precedente.
vim mio-segreto.yml
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: cmFodWw= password: aG93dG9mb3JnZTEyMw==

Ora creiamo un pod in cui è possibile accedere a questi segreti.
Crea un nuovo file che conterrà la definizione del pod come segue.
vim mio-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 
Creiamo i segreti usando il seguente comando.
kubectl create -f my-secret.yml
kubectl diventa segreto | grep mysecret
Ora, crea un pod utilizzando la seguente definizione di pod per accedere ai segreti precedentemente creati.
kubectl create -f mio-pod.yml
kubectl get pods | grep secrets-in-pod

Accedi al pod usando il comando seguente.
kubectl ottenere pod | grep secrets-in-pod
kubectl exec -it secrets-in-pod /bin/bash

Una volta effettuato l'accesso al pod, è possibile accedere ai segreti come variabile d'ambiente utilizzando il comando seguente.
echo $SECRET_USERNAME
eco $PASSWORD_SEGRETA

Nello screenshot sopra, puoi vedere che i segreti sono disponibili come variabili d'ambiente.
Per vedere i dettagli dell'oggetto segreto, esegui il comando seguente.
kubectl diventa segreto | grep mysecret
kubectl get secret mysecret -o yaml

Questi secret possono anche essere decodificati dalla riga di comando usando i seguenti comandi.
kubectl get secrets/mysecret --template={{.data.username}} | base64 -d
kubectl get secrets/mysecret --template={{.data.password}} | base64 -d

Nello screenshot sopra, si può vedere che le credenziali vengono estratte dai Segreti e decifrate sulla riga di comando utilizzando base64.
Conclusione
In questo articolo, abbiamo visto i passaggi per creare e archiviare i segreti in Kubernetes da un file .yml. Abbiamo provato ad accedere a questi segreti in Pod come variabili di ambiente. Abbiamo anche visto il comando per decrittografare i segreti sulla riga di comando.