Поиск по сайту:

Создавайте и храните секреты, такие как пароли, токены OAuth и ключи SSH, в Kubernetes


В Kubernetes мы можем хранить и управлять конфиденциальной информацией, такой как пароли, токены OAuth и ключи ssh, используя секреты Kubernetes. В Kubernetes секреты могут быть определены как объекты Kubernetes. Безопаснее хранить учетные данные в Kubernetes Secrets, чем в модулях или образах Docker.

В Kubernetes есть несколько способов создания секретов:

  1. Создание из текстового файла
  2. Создание из файла yml

Как только секреты станут доступны, их можно будет использовать следующими способами:

  1. Переменная среды
  2. Объем
  3. Использование поля imagePullSecrets

Чтобы узнать больше о секретах Kubernetes, нажмите здесь.

В этой статье мы создадим секреты с помощью файла .yml и получим к ним доступ в поде как к переменным среды.

Предпосылки

  1. Кластер Kubernetes с хотя бы 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18l04 EC2.

Что мы будем делать

  1. Создание секретов

Создавайте секреты

Чтобы создать новые секреты в Kubernetes, сначала зашифруйте их, как показано ниже, используя метод кодирования base64.

Здесь,

имя пользователя=рахул и пароль=howtoforge123.

echo -n "rahul" | base64

echo -n "howtoforge123" | base64

На приведенном выше снимке экрана видно, что учетные данные были зашифрованы.

Создайте файл определения секрета следующим образом, этот файл содержит значение base64 учетных данных, созданных на предыдущем шаге.

vim my-secret.yml

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

Теперь давайте создадим модуль, в котором эти секреты и будут доступны.

Создайте новый файл, который будет содержать определение модуля, как показано ниже.

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

Давайте создадим секреты, используя следующую команду.

kubectl create -f my-secret.yml

kubectl get secret | grep mysecret

kubectl create -f my-pod.yml

kubectl get  pods | grep secrets-in-pod

Войдите в модуль, используя следующую команду.

kubectl get pods | grep secrets-in-pod

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

После входа в модуль доступ к секретам можно получить как переменную среды с помощью следующей команды.

echo $SECRET_USERNAME

echo $SECRET_PASSWORD

На приведенном выше снимке экрана видно, что секреты доступны как переменные среды.

Чтобы просмотреть сведения о секретном объекте, выполните следующую команду.

kubectl get secret | grep mysecret

kubectl get secret mysecret -o yaml

Эти секреты также можно расшифровать из командной строки с помощью следующих команд.

kubectl get secrets/mysecret --template={{.data.username}} | base64 -d

kubectl get secrets/mysecret --template={{.data.password}} | base64 -d

На приведенном выше снимке экрана видно, что учетные данные извлекаются из секретов и расшифровываются в командной строке с использованием base64.

Заключение

В этой статье мы рассмотрели шаги по созданию и хранению секретов в Kubernetes из файла .yml. Мы пытались получить доступ к этим секретам в Pod как к переменным среды. Мы также видели команду для расшифровки секретов в командной строке.