В Kubernetes (k8s) Secret — это базовый объект, предназначенный для хранения и управления конфиденциальной информацией, такой как пароли, OAuth-токены, SSH-ключи, TLS-сертификаты и API-ключи. Его основная цель — предотвратить прямое внедрение чувствительных данных в определения Pod или образы контейнеров, что повышает безопасность и переносимость.
Secrets похожи на ConfigMaps, но предназначены специально для конфиденциальных данных. Обычно они хранятся в base64-кодировке и могут использоваться подами различными способами, включая монтирование в виде томов или предоставление в виде переменных окружения.
Повышенная безопасность: По сравнению с конфигурационными картами в открытом виде (Kubernetes ConfigMap), Secrets обеспечивают лучшую защиту, храня конфиденциальную информацию в Base64-кодировке. Этот механизм в сочетании с возможностями Kubernetes по контролю доступа значительно снижает риск утечки данных.
Гибкость и управление: Использование Secrets предоставляет более безопасный и гибкий подход, чем жесткое кодирование конфиденциальной информации непосредственно в файлах определения Pod или образах контейнеров. Такое разделение упрощает управление и изменение чувствительных данных без необходимости менять код приложения или образы контейнеров.
Kubernetes поддерживает различные типы Secrets, каждый из которых предназначен для конкретных случаев использования. Платформа обычно поддерживает следующие типы:
Opaque: универсальный тип Secret для хранения произвольных пар ключ-значение с конфиденциальными данными, такими как пароли или API-ключи.
TLS: специально предназначен для хранения сертификатов и приватных ключей протокола TLS (Transport Layer Security), часто используемых для HTTPS и безопасного ingress.
SSH Key: используется для хранения приватных SSH-ключей, часто для безопасного доступа к Git-репозиториям или другим сервисам с поддержкой SSH.
SSH Authentication (kubernetes.io/ssh-auth): хранит данные аутентификации для передачи данных по протоколу SSH.
Username/Password (kubernetes.io/basic-auth): используется для хранения учетных данных базовой аутентификации (имя пользователя и пароль).
Image Pull Secret (kubernetes.io/dockerconfigjson): хранит JSON-строку аутентификации, необходимую для загрузки образов контейнеров из приватных репозиториев образов (Docker Registry).
Secrets могут использоваться приложениями внутри подов различными способами:
В виде переменных окружения: конфиденциальные данные из Secret могут быть внедрены непосредственно в переменные окружения контейнера.
В виде смонтированных файлов (тома): Secrets могут монтироваться в виде файлов в том пода, позволяя приложениям читать конфиденциальные данные по заданному пути.
Примечание: Экземпляры Pod в рабочих нагрузках могут ссылаться только на Secrets в том же namespace. Для расширенного использования и YAML-конфигураций обратитесь к официальной документации Kubernetes.
YAML
Вы можете декодировать их так:
YAML
K8s автоматически преобразует ваше имя пользователя, пароль, email и информацию о сервере в стандартный формат входа Docker:
Этот JSON затем кодируется в base64 и используется в поле data Secret.
Используйте его в Pod:
Сценарий использования: хранение приватных SSH-ключей (например, для доступа к Git).
Сценарий использования: TLS-сертификаты (используются Ingress, вебхуками и др.)
YAML
Перейдите в Container Platform.
В левой навигационной панели выберите Configuration > Secrets.
Нажмите Create Secret.
Настройте параметры.
Примечание: В форме ввода конфиденциальные данные, такие как имя пользователя и пароль, автоматически кодируются в Base64 перед сохранением в Secret. Преобразованные данные можно просмотреть в YAML-виде.
Нажмите Create.
Из секрета с именем my-secret
берется значение по ключу username
и присваивается переменной окружения DB_USERNAME
.
При создании рабочих нагрузок для нативных приложений в том же namespace вы можете ссылаться на уже созданные Secrets.
Вы можете нажать (⋮) справа на странице списка или выбрать Actions в правом верхнем углу страницы деталей, чтобы при необходимости обновить или удалить Secret.
Операция | Описание |
---|---|
Обновить | После добавления или обновления Secret, рабочие нагрузки, которые ссылались на этот Secret (или его элементы конфигурации) через переменные окружения, должны пересоздать свои Pods, чтобы новые настройки вступили в силу. |
Удалить |
|