Настройка приложений с использованием секретов (Secrets)

KubernetesBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы узнаете, как использовать Kubernetes Secrets для безопасного управления конфиденциальной информацией, такой как пароли, ключи API и другие секретные данные. Вы создадите секрет, используете его в своем приложении и убедитесь, что приложение настроено правильно. Каждый шаг основывается на предыдущем, поэтому внимательно следуйте инструкциям.

Запуск кластера Minikube

Прежде чем создавать ресурсы, вам потребуется запущенный кластер Kubernetes. Minikube — это облегченная среда Kubernetes, которая работает на вашем локальном компьютере.

  1. Перейдите в рабочий каталог:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
    
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    
    • Эта команда настраивает одноузловой кластер Kubernetes на вашем локальном компьютере.
    • Запуск Minikube может занять несколько минут в зависимости от производительности вашей системы.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    
    • Ищите такие компоненты, как kubelet и apiserver, со статусом Running.
    • Если кластер не запущен, перезапустите minikube start.

Если у вас возникнут проблемы с запуском Minikube, используйте minikube delete, чтобы при необходимости сбросить окружение.

Создание секрета (Secret)

На этом шаге вы создадите Kubernetes Secret, который содержит пароль от базы данных.

Создайте файл с именем my-secret.yaml в каталоге /home/labex/project со следующим содержимым:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: dXNlcm5hbWU6cGFzc3dvcmQ=

В этом файле мы указываем имя секрета (my-secret), тип данных, которые он содержит (Opaque), и фактические данные в формате Base64.

Примените секрет к вашему кластеру, выполнив следующую команду:

kubectl apply -f my-secret.yaml

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

kubectl get secrets

Вы должны увидеть секрет my-secret в списке.

Использование секрета (Secret) в вашем приложении

На этом шаге вы измените ваше приложение, чтобы использовать секрет my-secret для получения пароля от базы данных.

Создайте файл с именем my-app.yaml в каталоге /home/labex/project со следующим содержимым:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-secret
                  key: password

В этом файле мы указываем имя развертывания (Deployment) (my-app), используемый образ (my-image) и переменную окружения, которую нужно установить (DATABASE_PASSWORD). Мы также используем secretKeyRef для получения ключа password из секрета my-secret.

Примените развертывание к вашему кластеру, выполнив следующую команду:

kubectl apply -f my-app.yaml

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

kubectl get deployments

Вы должны увидеть развертывание my-app в списке.

Проверка конфигурации

На этом шаге вы проверите, что ваше приложение правильно настроено с паролем от базы данных из секрета my-secret.

Найдите имя pod'а (pod), на котором запущено ваше приложение, выполнив следующую команду:

kubectl get pods -l app=my-app

Вы должны увидеть один pod, на котором запущено ваше приложение. Запомните имя pod'а.

Далее, выполните следующую команду, чтобы открыть сессию shell в контейнере, на котором запущено ваше приложение:

kubectl exec -it pod-name -- /bin/sh

Замените <pod-name> фактическим именем pod'а, которое вы запомнили ранее.

После того, как вы окажетесь в сессии shell, выполните следующую команду, чтобы вывести значение переменной окружения DATABASE_PASSWORD:

echo $DATABASE_PASSWORD

Вы должны увидеть пароль от базы данных, который был получен из секрета my-secret.

Монтирование секрета (Secret) как тома в Pod

Теперь, когда мы создали секрет, мы можем смонтировать его как volume в pod'е. Мы создадим простой pod, который считывает значение секрета из смонтированного volume и выводит его в консоль.

Создайте файл с именем pod.yaml в каталоге /home/labex/project со следующим содержимым:

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
    - name: secret-container
      image: nginx
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

Примените конфигурацию pod'а:

kubectl apply -f pod.yaml

Проверка секрета (Secret) как тома в Pod

На этом шаге вы проверите, что ваше приложение правильно настроено с паролем от базы данных из секрета my-secret.

Сначала выполните следующую команду, чтобы открыть сессию shell в контейнере, где запущено ваше приложение:

kubectl exec -it secret-pod -- sh

После того, как вы окажетесь в сессии shell, выполните следующую команду, чтобы вывести значение:

cat /etc/secret-volume/password

Вывод должен содержать значение секрета.

Резюме

В этой лабораторной работе мы узнали, как использовать секреты (secrets) Kubernetes для хранения конфиденциальной информации и как использовать их в pod'е. Секреты предоставляют безопасный способ управления конфиденциальной информацией и должны использоваться, когда это возможно, чтобы избежать раскрытия секретов в виде открытого текста.