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

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

Створення обʼєктів Secret за допомогою командного рядка 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).

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

  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=
    

    Увага:

    Це приклад для цілей документації. На практиці цей спосіб може призвести до збереження команди із закодованими даними в історії оболонки. Будь-хто з доступом до вашого компʼютера може знайти цю команду й розкодувати 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

Що далі