Ricerca nel sito web

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:

  1. Creazione da un file di testo
  2. Creazione da un file yml

Una volta che i segreti sono disponibili, possono essere utilizzati nei seguenti modi:

  1. Variabile d'ambiente
  2. Volume
  3. 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

  1. 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

  1. 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.