Введение
В этой лабораторной работе вы узнаете, как использовать Kubernetes Secrets для безопасного управления конфиденциальной информацией, такой как пароли, ключи API и другие секретные данные. Вы создадите секрет, используете его в своем приложении и убедитесь, что приложение настроено правильно. Каждый шаг основывается на предыдущем, поэтому внимательно следуйте инструкциям.
Запуск кластера Minikube
Прежде чем создавать ресурсы, вам потребуется запущенный кластер Kubernetes. Minikube — это облегченная среда Kubernetes, которая работает на вашем локальном компьютере.
Перейдите в рабочий каталог:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает одноузловой кластер Kubernetes на вашем локальном компьютере.
- Запуск Minikube может занять несколько минут в зависимости от производительности вашей системы.
Проверьте, что 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'е. Секреты предоставляют безопасный способ управления конфиденциальной информацией и должны использоваться, когда это возможно, чтобы избежать раскрытия секретов в виде открытого текста.


