Что такое Sealed Secret в Kubernetes?

«Что такое Sealed Secret в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Sealed Secret — это специальный ресурс Kubernetes, который позволяет безопасно хранить зашифрованные секреты (Secrets) в системах контроля версий, таких как Git, в рамках практик GitOps. Это достигается за счет асимметричного шифрования, где зашифровать данные может любой, а расшифровать — только контроллер Sealed Secrets, работающий внутри целевого кластера.

Как это работает:

  1. В кластере устанавливается контроллер sealed-secrets. Он генерирует пару ключей (публичный и приватный).
  2. Локально, используя CLI-утилиту kubeseal и публичный ключ от контроллера, вы шифруете обычный манифест Secret. На выходе получается манифест SealedSecret.
  3. Этот SealedSecret можно безопасно коммитить в Git-репозиторий.
  4. При применении манифеста в кластере, контроллер 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, зашифрованный для одного кластера, не может быть расшифрован в другом.
  • Ролевая модель: Разработчики могут создавать секреты, не имея доступа к уже существующим в кластере.