Керування 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