Ответ
Sealed Secret — это специальный ресурс Kubernetes, который позволяет безопасно хранить зашифрованные секреты (Secrets) в системах контроля версий, таких как Git, в рамках практик GitOps. Это достигается за счет асимметричного шифрования, где зашифровать данные может любой, а расшифровать — только контроллер Sealed Secrets, работающий внутри целевого кластера.
Как это работает:
- В кластере устанавливается контроллер
sealed-secrets. Он генерирует пару ключей (публичный и приватный). - Локально, используя CLI-утилиту
kubesealи публичный ключ от контроллера, вы шифруете обычный манифестSecret. На выходе получается манифестSealedSecret. - Этот
SealedSecretможно безопасно коммитить в Git-репозиторий. - При применении манифеста в кластере, контроллер
sealed-secretsвидит ресурсSealedSecret, расшифровывает его своим приватным ключом и создает обычный ресурсSecret, который затем могут использовать ваши поды.
Пример создания:
# Создаем обычный secret в dry-run режиме и передаем его на шифрование kubeseal
kubectl create secret generic my-db-cred
--from-literal=username=admin
--from-literal=password='S3cr3t!'
--dry-run=client -o yaml |
kubeseal --controller-namespace=kube-system --format yaml > sealed-secret.yaml
Полученный sealed-secret.yaml:
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: my-db-cred
spec:
encryptedData:
username: AgByRjN6kK4lw... # Зашифрованные данные
password: BgDfTjU8mLoP...
Ключевые преимущества:
- Безопасность GitOps: Позволяет хранить секреты вместе с остальной инфраструктурой как код (IaC).
- Кластерная привязка: Sealed Secret, зашифрованный для одного кластера, не может быть расшифрован в другом.
- Ролевая модель: Разработчики могут создавать секреты, не имея доступа к уже существующим в кластере.