kubectl поддерживает использование инструмента управления объектами Kustomize для управления Secrets
и ConfigMaps. С помощью Kustomize создаётся генератор ресурсов, который
формирует Secret, применяемый к API-серверу командой kubectl.
Вам нужен Kubernetes кластер и инструмент командной строки kubectl должен быть настроен на связь с вашим кластером. Если у вас ещё нет кластера, вы можете создать, его используя Minikube, или вы можете использовать одну из песочниц Kubernetes:
Secret можно сгенерировать, определив secretGenerator в файле
kustomization.yaml, который ссылается на существующие файлы, файлы .env
или литеральные значения. Например, следующие инструкции создают файл
kustomization для имени пользователя admin и пароля 1f2d1e2e67df.
stringData у Secret плохо работает совместно с серверным применением (server-side apply).
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
Сохраните учётные данные в файлы. Имена файлов станут ключами Secret:
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
Флаг -n гарантирует отсутствие символа новой строки в конце файлов.
Создайте файл kustomization.yaml:
secretGenerator:
- name: database-creds
files:
- username.txt
- password.txt
secretGenerator в файле kustomization.yaml можно также определить с помощью
файлов .env. Например, следующий файл kustomization.yaml считывает данные
из файла .env.secret:
secretGenerator:
- name: db-user-pass
envs:
- .env.secret
Во всех случаях кодировать значения в base64 не нужно. Имя YAML-файла должно
быть kustomization.yaml или kustomization.yml.
Чтобы создать Secret, примените директорию, содержащую файл kustomization:
kubectl apply -k <directory-path>
Вывод будет аналогичен следующему:
secret/database-creds-5hdh7hhgfk created
При генерации Secret его имя формируется путём хэширования данных Secret и добавления значения хэша к имени. Это гарантирует, что при каждом изменении данных будет сгенерирован новый Secret.
Чтобы убедиться, что Secret был создан, и декодировать его данные:
kubectl get -k <directory-path> -o jsonpath='{.data}'
Вывод будет аналогичен следующему:
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
Вывод будет аналогичен следующему:
1f2d1e2e67df
Дополнительную информацию см. в разделах Управление Secrets с помощью kubectl и Декларативное управление объектами Kubernetes с помощью Kustomize.
Измените данные в файле kustomization.yaml, например значение password.
Примените директорию, содержащую файл kustomization:
kubectl apply -k <directory-path>
Вывод будет аналогичен следующему:
secret/db-user-pass-6f24b56cc8 created
Отредактированный Secret создаётся как новый Secret, а не обновляет существующий. Возможно, потребуется обновить ссылки на Secret в ваших Pod'ах.
Чтобы удалить Secret, используйте kubectl:
kubectl delete secret db-user-pass