Secret: чувствительные данные
Пароли и токены не место в манифесте на виду — для них есть отдельный объект Secret.
Secret — объект для хранения чувствительных данных (пароли, токены, ключи, TLS-сертификаты), подключаемых к подам так же, как ConfigMap.
Технически Secret почти как ConfigMap, но предназначен для секретов. Kubernetes обращается с ним аккуратнее: значения не светятся в обычном выводе, доступ к ним можно ограничивать политиками. Подключается он теми же способами — env-переменные или файлы.
Создаём Secret
Проще всего императивно — Kubernetes сам закодирует значения:
kubectl create secret generic db-secret \
--from-literal=DB_USER=admin \
--from-literal=DB_PASSWORD=s3cr3tВ манифесте значения хранятся в base64 (в поле data). Это кодирование, а не шифрование — base64 легко раскодировать:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
DB_USER: YWRtaW4= # base64('admin')
DB_PASSWORD: czNjcjN0 # base64('s3cr3t')Важно: base64 — это НЕ защита. Не кладите Secret-манифесты с реальными значениями в Git. Для реальной безопасности используют шифрование etcd и внешние хранилища (Vault, облачные secret-менеджеры).
Подключение как env-переменные
spec:
containers:
- name: app
image: my-app:1.0
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: DB_PASSWORDВнутри контейнера появится переменная DB_PASSWORD со значением из Secret. Так же его можно смонтировать как файлы через volumes — удобно для сертификатов.
| ConfigMap | Secret | |
| Для чего | обычные настройки | пароли, токены, ключи |
| Хранение значений | как есть | base64 |
| Подключение | env / файлы | env / файлы |
Итог
- Secret хранит чувствительные данные отдельно от обычной конфигурации.
- Значения кодируются в base64 — это не шифрование, а лишь кодирование.
- Подключается как env-переменные (secretKeyRef) или как файлы.