Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.
Керування Secrets
1 - Керування Secrets за допомогою kubectl
На цій сторінці показано, як створювати й редагувати Secrets Kubernetes, керувати ними та видаляти їх за допомогою інструмента командного рядка kubectl.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Створення Secret
Обʼєкт 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гарантує, що згенеровані файли не матимуть зайвого символу нового рядка в кінці тексту. Це важливо, бо коли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>
Це відкриє ваш типовий редактор і дозволить оновити закодовані в 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
Що далі
- Дізнайтеся більше про концепцію Secret
- Дізнайтеся, як керувати Secrets за допомогою файлу конфігурації
- Дізнайтеся, як керувати Secrets за допомогою kustomize
2 - Керування Secrets за допомогою Kustomize
kubectl підтримує використання інструмента керування обʼєктами Kustomize для керування Secrets і ConfigMaps. За допомогою Kustomize ви створюєте генератор ресурсів, який генерує Secret, що його можна застосувати до API-сервера за допомогою kubectl.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Створення Secret
Ви можете згенерувати Secret, визначивши secretGenerator у файлі kustomization.yaml, який посилається на інші наявні файли, файли .env або літеральні значення. Наприклад, наведені нижче інструкції створюють файл kustomization для імені користувача admin і пароля 1f2d1e2e67df.
Примітка:
ПолеstringData у Secret погано працює із застосуванням на боці сервера (server-side apply).Створення файлу kustomization
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.
Застосування файлу kustomization
Щоб створити Secret, застосуйте теку, яка містить файл kustomization:
kubectl apply -k <directory-path>
Вивід подібний до такого:
secret/database-creds-5hdh7hhgfk created
Під час генерації Secret його назву створюють шляхом хешування даних 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.
Редагування Secret
У файлі
kustomization.yamlзмініть дані, наприкладpassword.Застосуйте теку, яка містить файл kustomization:
kubectl apply -k <directory-path>Вивід подібний до такого:
secret/db-user-pass-6f24b56cc8 created
Змінений Secret створюється як новий обʼєкт Secret, а не оновлює наявний обʼєкт Secret. Можливо, вам доведеться оновити посилання на Secret у ваших Podʼах.
Очищення
Щоб видалити Secret, використайте kubectl:
kubectl delete secret db-user-pass
Що далі
- Дізнайтеся більше про концепцію Secret
- Дізнайтеся, як керувати Secrets за допомогою kubectl
- Дізнайтеся, як керувати Secrets за допомогою файлу конфігурації