Общие сведения о секретах Kubernetes

Завершено

Одним из самых важных аспектов работы с распределенными приложениями является управление конфиденциальными данными, такими как пароли, подключения и аналогичные данные. Kubernetes позволяет защитить эти данные с помощью ресурса, называемого secret.

Понимание секретов

В Kubernetes секреты позволяют хранить конфиденциальную информацию более безопасным образом, чем формат обычного текста в модулях pod и развертываниях. Секреты предназначены для хранения паролей и других конфиденциальных данных.

Секреты Kubernetes зашифровывают данные в формате кодирования base64. Хотя base64 не является алгоритмом шифрования, Kubernetes может увидеть, что информация закодирована и может скрыть эту информацию от выходных данных команд, таких как kubectl describe. Этот процесс не происходит с конфигурацией простого текста. Секреты всегда ограничиваются одним пространством имён, чтобы избежать дополнительного раскрытия конфиденциальных данных другим нагрузкам в кластере.

Типы секретов

Существуют различные типы секретов. Наиболее распространенным и стандартным типом является Opaque, в которой хранятся пользовательские произвольные данные. К другим общим типам относятся:

  • kubernetes.io/service-account-token: определяет маркер учетной записи службы и автоматически создается при создании новой учетной записи службы.
  • kubernetes.io/basic-auth: учетные данные для базовой проверки подлинности.
  • kubernetes.io/tls: данные клиента или сервера TLS, используемые, например, для обслуживания HTTPS-подключений из ресурса Ingress.

Совет

Дополнительные сведения см. в официальной документации Секреты Kubernetes.

Создание и использование секрета

Согласно официальной документации по Секретам Kubernetes, можно использовать Secret тремя способами:

  • Монтируется как файлы в томе в контейнерах внутри Pod или Deployment.
  • Упоминается как переменная среды в спецификации Pod или Deployment.
  • Используется Kubelet при извлечении изображений из частных реестров с помощью ключа imagePullSecret в спецификации Pod.

Секреты можно создать как любой другой ресурс Kubernetes, используя файл манифеста YAML или команду kubectl. Спецификация секрета выглядит следующим образом:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

Для секрета с этой спецификацией необходимо закодировать значения , прежде чем создать секрет. Если вы хотите создать секрет с помощью обычного текстового значения и позволить Kubernetes автоматически кодировать его, вы используете stringData вместо data:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

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

Секретные обновления

Все секреты, которые монтированы в виде томов внутри модуля (pod), автоматически обновляются при изменении их значения. Это изменение может произойти не сразу из-за конфигурации Kubelet, но это происходит автоматически, так что перезапуск Pod не нужен.

В случаях, когда секреты привязаны к переменным среды, они не обновляются автоматически, что требует перезапуска Pod, чтобы изменения вступили в силу.

Проверка знаний

1.

Почему секреты Kubernetes безопаснее, чем значения обычного текста?

2.

Как использовать секреты в приложении?

3.

Как base64 используется в секретах?