Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.

Повернутися до звичайного перегляду сторінки.

Керування Secret

Керування конфіденційними налаштуваннями за допомогою Secret.

1 - Керування Secret за допомогою kubectl

Створення обʼєктів 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='

Вам потрібно використовувати одинарні лапки '', щоб екранувати спеціальні символи, такі як $, \, *, =, і ! у вашому рядку. Якщо ви цього не зробите, ваша оболонка буде інтерпретувати ці символи відповідним чином.

Використання сирцевих файлів

  1. Збережіть облікові дані у файлах:

    echo -n 'admin' > ./username.txt
    echo -n 'S!B\*d$zDsb=' > ./password.txt
    

    Прапорець -n гарантує, що згенеровані файли не матимуть додаткового символу нового рядка в кінці тексту. Це важливо, оскільки коли kubectl зчитує файл і кодує вміст у рядок base64, додатковий символ нового рядка також буде закодований. Вам не потрібно екранувати спеціальні символи у рядках, які ви включаєте в файл.

  2. Передайте шляхи до файлів у команду 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

  1. Перегляньте вміст створеного вами Secret:

    kubectl get secret db-user-pass -o jsonpath='{.data}'
    

    Вивід буде подібний до:

    { "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
    
  2. Розкодуйте дані password:

    echo 'UyFCXCpkJHpEc2I9' | base64 --decode
    

    Вивід буде подібний до:

    S!B\*d$zDsb=
    
    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

Що далі

2 - Керування Secret за допомогою конфігураційного файлу

Створення обʼєктів Secret за допомогою конфігураційного файлу ресурсів.

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Створення Secret

Ви можете спочатку визначити обʼєкт Secret у форматі JSON або YAML у маніфесті, а потім створити цей обʼєкт. Ресурс Secret містить два словники: data та stringData. Поле data використовується для зберігання довільних даних, закодованих за допомогою base64. Поле stringData надається для зручності, і воно дозволяє вам надавати ті самі дані у вигляді незакодованих рядків. Ключі data та stringData повинні складатися з буквено-цифрових символів, -, _ або ..

Наведений нижче приклад зберігає два рядки у Secret, використовуючи поле data.

  1. Конвертуйте рядки в base64:

    echo -n 'admin' | base64
    echo -n '1f2d1e2e67df' | base64
    

    Вивід буде подібний до:

    YWRtaW4=
    MWYyZDFlMmU2N2Rm
    
  2. Створіть маніфест:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: MWYyZDFlMmU2N2Rm
    

    Зверніть увагу, що імʼя обʼєкта Secret повинно бути дійсним піддоменом DNS.

  3. Створіть 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>    

При отриманні даних 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

Обʼєкт 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, виконайте наступне:

  1. Закодуйте новий рядок пароля:

    echo -n 'birdsarentreal' | base64
    

    Вивід буде подібний до:

    YmlyZHNhcmVudHJlYWw=
    
  2. Оновіть поле data із вашим новим рядком пароля:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: YmlyZHNhcmVudHJlYWw=
    
  3. Застосуйте маніфест у вашому кластері:

    kubectl apply -f ./secret.yaml
    

    Вивід буде подібний до:

    secret/mysecret configured
    

Kubernetes оновлює наявний обʼєкт Secret. Докладно, інструмент kubectl помічає, що є обʼєкт Secret з тим самим імʼям. kubectl отримує поточний обʼєкт, планує зміни в ньому і надсилає змінений обʼєкт Secret до панелі управління кластера.

Якщо ви вказали kubectl apply --server-side, kubectl використовує застосування на боці сервера замість цього.

Прибирання

Щоб видалити створений вами Secret:

kubectl delete secret mysecret

Що далі

3 - Керування Secret за допомогою Kustomize

Створення обʼєктів Secret за допомогою файлу kustomization.yaml.

kubectl підтримує використання інструменту керування обʼєктами Kustomize для керування Secret та ConfigMap. Ви можете створити генератор ресурсів за допомогою Kustomize, який створює Secret, який ви можете застосувати до сервера API за допомогою kubectl.

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Створення Secret

Ви можете створити Secret, визначивши secretGenerator у файлі kustomization.yaml, який посилається на інші наявні файли, файли .env або літеральні значення. Наприклад, наведені нижче інструкції створюють файл конфігурації Kustomization для імені користувача admin та пароля 1f2d1e2e67df.

Створення файлу Kustomization


secretGenerator:
- name: database-creds
  literals:
  - username=admin
  - password=1f2d1e2e67df

  1. Збережіть дані доступу у файлах. Назви файлів є ключами секрету:

    echo -n 'admin' > ./username.txt
    echo -n '1f2d1e2e67df' > ./password.txt
    

    Прапорець -n забезпечує відсутність символу нового рядка в кінці ваших файлів.

  2. Створіть файл 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": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
echo 'UyFCXCpkJHpEc2I9' | base64 --decode

Вивід буде подібний до:

S!B\*d$zDsb=

Для отримання додаткової інформації див. Керування Secret за допомогою kubectl та Декларативне керування обʼєктами Kubernetes за допомогою Kustomize.

Редагування Secret

  1. У вашому файлі kustomization.yaml змініть дані, наприклад, password.

  2. Застосуйте теку, який містить файл kustomization:

    kubectl apply -k <directory-path>
    

    Вивід буде подібний до:

    secret/db-user-pass-6f24b56cc8 created
    

Змінений Secret створюється як новий обʼєкт Secret, а не оновлюється наявний обʼєкт Secret. Можливо, вам знадобиться оновити посилання на Secret у ваших контейнерах.

Прибирання

Для видалення Secret використовуйте kubectl:

kubectl delete secret db-user-pass

Що далі