Управление Secrets с помощью kubectl

Создание объекта Secret с использованием утилиты командной строки kubectl.

На этой странице показано, как создавать, редактировать, управлять и удалять Kubernetes Secrets с помощью инструмента командной строки kubectl.

Подготовка к работе

Вам нужен Kubernetes кластер и инструмент командной строки kubectl должен быть настроен на связь с вашим кластером. Если у вас ещё нет кластера, вы можете создать, его используя Minikube, или вы можете использовать одну из песочниц Kubernetes:

Создание 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 гарантирует, что в конце текста в сгенерированных файлах не будет лишнего символа новой строки. Это важно, поскольку при чтении файла и кодировании содержимого в строку base64 утилита kubectl закодирует лишний символ новой строки тоже. Экранировать специальные символы в строках, содержащихся в файле, не нужно.

  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

  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>

Откроется редактор по умолчанию, позволяющий обновить закодированные в 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

Что дальше


Изменено April 15, 2026 at 9:56 AM PST: [ru] Localization of tasks/configmap-secret (13aef114d2)