Crea e archivia segreti come password, token OAuth e chiavi SSH in Kubernetes
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 nei segreti Kubernetes che nei pod o nelle immagini Docker.
Esistono 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 vi accederemo nel pod come variabili di 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 utilizzando il metodo di codifica Base64.
Qui,
username=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 segreto come segue, questo file contiene il valore base64 delle credenziali generate nel passaggio precedente.
vim my-secret.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 e.
Crea un nuovo file che conterrà la definizione del pod come segue.
vim my-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
Consente di creare segreti utilizzando il seguente comando.
kubectl create -f my-secret.yml
kubectl get secret | grep mysecret
kubectl create -f my-pod.yml
kubectl get pods | grep secrets-in-pod
Accedi al pod usando il seguente comando.
kubectl get pods | 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 di ambiente utilizzando il seguente comando.
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
Nello screenshot sopra, si può vedere che i secret sono disponibili come variabili di ambiente.
Per visualizzare i dettagli dell'oggetto segreto, eseguire il seguente comando.
kubectl get secret | grep mysecret
kubectl get secret mysecret -o yaml
Questi segreti possono anche essere decodificati dalla riga di comando utilizzando 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 nel pod come variabili di ambiente. Abbiamo anche visto il comando per decrittografare i segreti sulla riga di comando.