Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.
Керування Secret
1 - Керування 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
2 - Керування Secret за допомогою конфігураційного файлу
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Створення Secret
Ви можете спочатку визначити обʼєкт Secret
у форматі JSON або YAML у маніфесті, а потім створити цей обʼєкт. Ресурс Secret містить два словники: data
та stringData
. Поле data
використовується для зберігання довільних даних, закодованих за допомогою base64. Поле stringData
надається для зручності, і воно дозволяє вам надавати ті самі дані у вигляді незакодованих рядків. Ключі data
та stringData
повинні складатися з буквено-цифрових символів, -
, _
або .
.
Наведений нижче приклад зберігає два рядки у Secret, використовуючи поле data
.
Конвертуйте рядки в base64:
echo -n 'admin' | base64 echo -n '1f2d1e2e67df' | base64
Примітка:
Серіалізовані значення JSON та YAML даних Secret кодуються як рядки base64. Переходи на новий рядок не дійсні у цих рядках та повинні бути вилучені. При використанні утилітиbase64
у Darwin/macOS користувачі повинні уникати використання опції-b
для розбиття довгих рядків. Навпаки, користувачам Linux слід додавати опцію-w 0
до командbase64
або конвеєруbase64 | tr -d '\n'
, якщо опція-w
недоступна.Вивід буде подібний до:
YWRtaW4= MWYyZDFlMmU2N2Rm
Створіть маніфест:
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm
Зверніть увагу, що імʼя обʼєкта Secret повинно бути дійсним піддоменом DNS.
Створіть Secret, використовуючи
kubectl apply
:kubectl apply -f ./secret.yaml
Вивід буде подібний до:
secret/mysecret created
Щоб перевірити, що Secret був створений та щоб розкодувати дані Secret, див. Керування Secret за допомогою kubectl.
Вказання незакодованих даних під час створення Secret
Для певних сценаріїв можливо вам захочеться використовувати поле stringData
. Це поле дозволяє вам розміщувати незакодований рядок безпосередньо у Secret, і цей рядок буде закодований за вас при створенні або оновленні Secret.
Практичний приклад цього може бути там, де ви розгортаєте застосунок, що використовує Secret для зберігання файлу конфігурації, і ви хочете заповнити частини цього файлу конфігурації під час процесу розгортання.
Наприклад, якщо ваш застосунок використовує такий файл конфігурації:
apiUrl: "https://my.api.com/api/v1"
username: "<user>"
password: "<password>"
Ви можете зберегти це в Secret, використовуючи таке визначення:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
config.yaml: |
apiUrl: "https://my.api.com/api/v1"
username: <user>
password: <password>
Примітка:
ПолеstringData
для Secret погано працює із застосуванням на стороні сервера.При отриманні даних Secret, команда повертає закодовані значення, а не текстові значення, які ви вказали у stringData
.
Наприклад, якщо ви виконаєте наступну команду:
kubectl get secret mysecret -o yaml
Вивід буде подібний до:
apiVersion: v1
data:
config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:40:59Z
name: mysecret
namespace: default
resourceVersion: "7225"
uid: c280ad2e-e916-11e8-98f2-025000000001
type: Opaque
Вказання як data
, так і stringData
Якщо ви вказали поле як у data
, так і у stringData
, буде використано значення з stringData
.
Наприклад, якщо ви визначите наступний секрет:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
stringData:
username: administrator
Примітка:
ПолеstringData
для Secret погано працює із застосуванням на стороні сервера.Обʼєкт Secret
буде створено так:
apiVersion: v1
data:
username: YWRtaW5pc3RyYXRvcg==
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:46:46Z
name: mysecret
namespace: default
resourceVersion: "7579"
uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque
YWRtaW5pc3RyYXRvcg==
декодується у administrator
.
Редагування Secret
Щоб редагувати дані у Secret, створеному за допомогою маніфесту, змініть поле data
або stringData
у вашому маніфесті та застосуйте файл у вашому кластері. Ви можете редагувати наявний обʼєкт Secret
, за винятком випадку, коли він є незмінним.
Наприклад, якщо ви хочете змінити пароль з попереднього прикладу на birdsarentreal
, виконайте наступне:
Закодуйте новий рядок пароля:
echo -n 'birdsarentreal' | base64
Вивід буде подібний до:
YmlyZHNhcmVudHJlYWw=
Оновіть поле
data
із вашим новим рядком пароля:apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: YmlyZHNhcmVudHJlYWw=
Застосуйте маніфест у вашому кластері:
kubectl apply -f ./secret.yaml
Вивід буде подібний до:
secret/mysecret configured
Kubernetes оновлює наявний обʼєкт Secret
. Докладно, інструмент kubectl
помічає, що є обʼєкт Secret
з тим самим імʼям. kubectl
отримує поточний обʼєкт, планує зміни в ньому і надсилає змінений обʼєкт Secret
до панелі управління кластера.
Якщо ви вказали kubectl apply --server-side
, kubectl
використовує застосування на боці сервера замість цього.
Прибирання
Щоб видалити створений вами Secret:
kubectl delete secret mysecret
Що далі
- Дізнайтеся більше про концепцію Secret
- Дізнайтесь, як керувати Secret за допомогою kubectl
- Дізнайтесь, як керувати Secret за допомогою kustomize
3 - Керування Secret за допомогою Kustomize
kubectl
підтримує використання інструменту керування обʼєктами Kustomize для керування Secret та ConfigMap. Ви можете створити генератор ресурсів за допомогою Kustomize, який створює Secret, який ви можете застосувати до сервера API за допомогою kubectl
.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Створення Secret
Ви можете створити Secret, визначивши secretGenerator
у файлі kustomization.yaml
, який посилається на інші наявні файли, файли .env
або літеральні значення. Наприклад, наведені нижче інструкції створюють файл конфігурації kustomization для імені користувача admin
та пароля 1f2d1e2e67df
.
Примітка:
ПолеstringData
для Secret погано працює із застосуванням на стороні сервера.Створення файлу kustomization
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
Збережіть дані доступу у файлах. Назви файлів є ключами секрету:
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 був створений та розкодувати дані Secret,
kubectl get -k <directory-path> -o jsonpath='{.data}'
Вивід буде подібний до:
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
Вивід буде подібний до:
1f2d1e2e67df
Для отримання додаткової інформації див. Керування Secret за допомогою kubectl та Декларативне керування обʼєктами Kubernetes за допомогою Kustomize.
Редагування Secret
У вашому файлі
kustomization.yaml
змініть дані, наприклад,password
.Застосуйте теку, який містить файл kustomization:
kubectl apply -k <directory-path>
Вивід буде подібний до:
secret/db-user-pass-6f24b56cc8 created
Змінений Secret створюється як новий обʼєкт Secret
, а не оновлюється наявний обʼєкт Secret
. Можливо, вам знадобиться оновити посилання на Secret у ваших контейнерах.
Прибирання
Для видалення Secret використовуйте kubectl
:
kubectl delete secret db-user-pass
Що далі
- Дізнайтеся більше про концепцію Secret
- Дізнайтесь, як керувати Secret за допомогою kubectl
- Дізнайтесь, як керувати Secret за допомогою файлу конфігурації