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