Управление Secrets с помощью конфигурационного файла

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

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

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

Создание Secret

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

В следующем примере в Secret с помощью поля data сохраняются две строки.

  1. Закодируйте строки в base64:

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

    Примечание:

    Сериализованные значения данных Secret в JSON и YAML кодируются как строки base64. Символы новой строки недопустимы внутри этих строк и должны быть опущены. При использовании утилиты base64 в Darwin/macOS следует избегать опции -b для разбиения длинных строк. Пользователям Linux, напротив, следует добавлять опцию -w 0 к командам base64 или использовать конвейер base64 | tr -d '\n', если опция -w недоступна.

    Вывод будет аналогичен следующему:

    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 был создан, и декодировать его данные, обратитесь к разделу Управление Secrets с помощью kubectl.

Указание незакодированных данных при создании Secret

В ряде сценариев может потребоваться использовать поле stringData. Оно позволяет помещать строки без кодирования base64 непосредственно в 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 плохо работает совместно с серверным применением (server-side apply).

При получении данных 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.

Например, если определить следующий Secret:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
stringData:
  username: administrator

Примечание:

Поле stringData у Secret плохо работает совместно с серверным применением (server-side apply).

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

Если вместо этого указать kubectl apply --server-side, утилита kubectl будет использовать Server Side Apply.

Очистка

Чтобы удалить созданный Secret:

kubectl delete secret mysecret

Что дальше


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