Создавайте и храните секреты, такие как пароли, токены OAuth и ключи SSH, в Kubernetes
В Kubernetes мы можем хранить и управлять конфиденциальной информацией, такой как пароли, токены OAuth и ключи ssh, используя секреты Kubernetes. В Kubernetes секреты могут быть определены как объекты Kubernetes. Безопаснее хранить учетные данные в Kubernetes Secrets, чем в модулях или образах Docker.
В Kubernetes есть несколько способов создания секретов:
- Создание из текстового файла
- Создание из файла yml
Как только секреты станут доступны, их можно будет использовать следующими способами:
- Переменная среды
- Объем
- Использование поля imagePullSecrets
Чтобы узнать больше о секретах Kubernetes, нажмите здесь.
В этой статье мы создадим секреты с помощью файла .yml и получим к ним доступ в поде как к переменным среды.
Предпосылки
- Кластер Kubernetes с хотя бы 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18l04 EC2.
Что мы будем делать
- Создание секретов
Создавайте секреты
Чтобы создать новые секреты в 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 как к переменным среды. Мы также видели команду для расшифровки секретов в командной строке.