Maak en bewaar geheimen zoals wachtwoorden, OAuth tokens, en SSH sleutels in Kubernetes

In Kubernetes kunnen we gevoelige informatie, zoals wachtwoorden, OAuth tokens, en ssh sleutels opslaan en beheren met Kubernetes Secrets. In Kubernetes kunnen secrets gedefinieerd worden als Kubernetes Objects. Het is veiliger om credentials op te slaan in Kubernetes Secrets dan in Pods of in Docker Images.

Er zijn meerdere manieren om geheimen te genereren in Kubernetes:

  1. Aanmaken vanuit een tekstbestand
  2. Aanmaken vanuit een yml bestand

Zodra de geheimen beschikbaar zijn kunnen ze op de volgende manieren gebruikt worden:

  1. Omgevingsvariabele
  2. Volume
  3. Met behulp van het veld imagePullSecrets

Om meer te weten over Kubernetes Secrets, klik hier.

In dit artikel zullen we geheimen aanmaken met een .yml bestand en ze in de Pod als Omgevingsvariabelen benaderen.

Pre-requisites

  1. Kubernetes Cluster met minstens 1 worker node.
    Wil je leren om een Kubernetes Cluster te maken, klikdan hier. Deze gids helpt je een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18l04 EC2 Instances.

Wat we zullen doen

  1. Geheimen aanmaken

Geheimen aanmaken

Om nieuwe geheimen in Kubernetes te maken, codeer je ze eerst zoals hieronder getoond met de base64 coderingsmethode.

Hier,

gebruikersnaam=rahul en wachtwoord=howtoforge123.

echo -n “rahul” | base64

echo -n “howtoforge123” | base64

codeer-credentials

In de bovenstaande schermafbeelding is te zien dat de inloggegevens versleuteld zijn.

Maak als volgt een geheim definitiebestand, dit bestand bevat de base64 waarde van de in de bovenstaande stap gegenereerde geloofsbrieven,.

vim mijn-secret.yml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: cmFodWw=
  password: aG93dG9mb3JnZTEyMw==

mijn-geheimen

Laten we nu een pod maken waarin deze geheimen en kunnen worden benaderd.

Maak als volgt een nieuw bestand dat de pod definitie zal bevatten.

vim mijn-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

my-pod

Laten we geheimen maken met het volgende commando.

kubectl create -f my-secret.yml

kubectl get secret | grep mysecret

create-secretMaak nu een pod met de volgende pod definitie om toegang te krijgen tot de eerder gemaakte geheimen.

kubectl create -f my-pod.yml

kubectl get pods | grep secrets-in-pod

my-pod

Log in de pod in met het volgende commando.

kubectl get pods | grep secrets-in-pod

kubectl exec -it secrets-in-pod /bin/bash

login-into-pod

Zodra je inlogt in de pod, zijn de secrets toegankelijk als omgevingsvariabele met het volgende commando.

echo $SECRET_USERNAME

echo $SECRET_PASSWORD

access-credentials-in-pod

In de bovenstaande schermafbeelding is te zien dat de geheimen beschikbaar zijn als Omgevingsvariabelen.

Om details van het geheim object te zien, voer je het volgende commando uit.

kubectl get secret | grep mysecret

kubectl get secret mysecret -o yaml

get-secret-details

Deze secrete kunnen ook vanaf de commandoregel gedecodeerd worden met de volgende commando’s.

kubectl get secrets/mysecret –template={.gegevens.gebruikersnaam}} | base64 -d

kubectl get secrets/mysecret –template={.gegevens.wachtwoord}} | base64 -d

decodeer-geheimen

In de bovenstaande schermafbeelding is te zien dat de geloofsbrieven uit de Secrets gehaald worden en op de commandoregel met base64 ontsleuteld worden.

Conclusie

In dit artikel zagen we de stappen om geheimen in Kubernetes te maken en op te slaan vanuit een .yml bestand. We probeerden deze geheimen in Pod te benaderen als Omgevingsvariabelen. We zagen ook het commando om de geheimen op de commandoregel te decoderen.