На этой странице показано, как создавать, редактировать, управлять и удалять Kubernetes
Secrets с помощью инструмента командной строки kubectl.
Вам нужен Kubernetes кластер и инструмент командной строки kubectl должен быть настроен на связь с вашим кластером. Если у вас ещё нет кластера, вы можете создать, его используя Minikube, или вы можете использовать одну из песочниц Kubernetes:
Объект Secret хранит конфиденциальные данные, например учётные данные,
используемые Pod'ами для доступа к сервисам. К примеру, может потребоваться Secret
для хранения имени пользователя и пароля, необходимых для доступа к базе данных.
Secret можно создать, передав данные непосредственно в команде или сохранив
учётные данные в файлах и указав их в команде. Следующие команды создают Secret,
в котором хранятся имя пользователя admin и пароль S!B\*d$zDsb=.
Выполните следующую команду:
kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='
Для экранирования специальных символов ($, \, *, =, !) в строках
необходимо использовать одинарные кавычки ''. В противном случае оболочка
интерпретирует эти символы самостоятельно.
stringData у Secret плохо работает совместно с серверным применением (server-side apply).Сохраните учётные данные в файлы:
echo -n 'admin' > ./username.txt
echo -n 'S!B\*d$zDsb=' > ./password.txt
Флаг -n гарантирует, что в конце текста в сгенерированных файлах не будет
лишнего символа новой строки. Это важно, поскольку при чтении файла и кодировании
содержимого в строку base64 утилита kubectl закодирует лишний символ новой строки
тоже. Экранировать специальные символы в строках, содержащихся в файле, не нужно.
Передайте пути к файлам в команде kubectl:
kubectl create secret generic db-user-pass \
--from-file=./username.txt \
--from-file=./password.txt
По умолчанию именем ключа становится имя файла. При желании можно указать имя ключа
явно с помощью --from-file=[key=]source. Например:
kubectl create secret generic db-user-pass \
--from-file=username=./username.txt \
--from-file=password=./password.txt
При использовании любого из этих методов вывод будет аналогичен следующему:
secret/db-user-pass created
Убедитесь, что Secret был создан:
kubectl get secrets
Вывод будет аналогичен следующему:
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
Просмотрите подробную информацию о Secret:
kubectl describe secret db-user-pass
Вывод будет аналогичен следующему:
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 12 bytes
username: 5 bytes
Команды kubectl get и kubectl describe по умолчанию не отображают содержимое Secret.
Это сделано для защиты от случайного раскрытия данных или их сохранения в логах терминала.
Просмотрите содержимое созданного Secret:
kubectl get secret db-user-pass -o jsonpath='{.data}'
Вывод будет аналогичен следующему:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
Декодируйте данные поля password:
echo 'UyFCXCpkJHpEc2I9' | base64 --decode
Вывод будет аналогичен следующему:
S!B\*d$zDsb=
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
Вы можете редактировать существующий объект Secret, если он не является
неизменяемым.
Для редактирования Secret выполните следующую команду:
kubectl edit secrets <secret-name>
Откроется редактор по умолчанию, позволяющий обновить закодированные в base64
значения Secret в поле data, как показано в следующем примере:
# Пожалуйста, отредактируйте объект ниже. Строки, начинающиеся с '#', будут проигнорированы,
# а пустой файл отменит редактирование. При возникновении ошибки во время сохранения файл
# будет открыт повторно с указанием неполадок.
#
apiVersion: v1
data:
password: UyFCXCpkJHpEc2I9
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2022-06-28T17:44:13Z"
name: db-user-pass
namespace: default
resourceVersion: "12708504"
uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque
Чтобы удалить Secret, выполните следующую команду:
kubectl delete secret db-user-pass