Керування Secret за допомогою kubectl
На цій сторінці ви дізнаєтесь, як створювати, редагувати, керувати та видаляти Secret Kubernetes за допомогою інструменту командного рядка kubectl
.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Створення Secret
Обʼєкт Secret
зберігає конфіденційні дані, такі як облікові дані, які використовуються потоками для доступу до служб. Наприклад, вам може знадобитися 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 не працює добре з apply на боці сервера.Використання сирцевих файлів
Збережіть облікові дані у файлах:
echo -n 'admin' > ./username.txt echo -n 'S!B\*d$zDsb=' > ./password.txt
Прапорець
-n
гарантує, що згенеровані файли не матимуть додаткового символу нового рядка в кінці тексту. Це важливо, оскільки колиkubectl
зчитує файл і кодує вміст у рядок base64, додатковий символ нового рядка також буде закодований. Вам не потрібно екранувати спеціальні символи у рядках, які ви включаєте в файл.Передайте шляхи до файлів у команду
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
Перевірте, що 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 від випадкового розкриття або збереження в журналі термінала.
Розкодування Secret
Перегляньте вміст створеного вами Secret:
kubectl get secret db-user-pass -o jsonpath='{.data}'
Вивід буде подібний до:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
Розкодуйте дані
password
:echo 'UyFCXCpkJHpEc2I9' | base64 --decode
Вивід буде подібний до:
S!B\*d$zDsb=
Увага:
Це приклад для цілей документації. На практиці цей метод може спричинити збереження команди з закодованими даними в історії вашої оболонки. Будь-хто, хто має доступ до вашого компʼютера, може знайти цю команду та розкодувати Secret. Кращий підхід — поєднувати команди перегляду та розкодування.kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
Редагування Secret
Ви можете редагувати наявний обʼєкт Secret
, якщо він не є незмінним. Щоб редагувати Secret, виконайте наступну команду:
kubectl edit secrets <secret-name>
Це відкриває ваш стандартний редактор і дозволяє оновити значення Secret, закодовані в base64, у полі 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
Що далі
- Дізнайтеся більше про концепцію Secret
- Дізнайтесь, як керувати Secret за допомогою файлу конфігурації
- Дізнайтесь, як керувати Secret за допомогою kustomize