Всем привет!
Самым распространенным способом управления секретами является использованием Secret Management решений. Ярким представителем которых является HashiCorp Vault.
Концепт такой что все секреты помещаются в единое надежное хранилище и выдаются на основании логики работы Vault’a.
А что если хочется чего-то иного? Например, подстановки самого значения секрета в момент установки соединения за счёт использования eBPF?
Как раз эту задачу и реализует Kloak.
Работает он примерно так:
🍭 Создаётся секрет в Kubernetes
Kloak автоматически создаёт shadow secret, в котором указывается placeholder
🍭 Настраивается взаимосвязь
pod с Kloak через аннотации🍭 Webhook мутирует
pod заменяя значение оригинального секрета на shadow secret, созданный Kloak🍭 В момент запуска
pod и установки соединения указывается настоящее значение секрета, полученное из связки shadow secret – оригинальный секретТакая связка позволяет реализовать процесс, в котором приложение не владеет данными о том, какой именно секрет (значение) используется.
Однако сам секрет всё равно «материализован» в кластере Kubernetes.
Подробнее о Kloak и его возможностях можно узнать в GitHub-репозитории или в официальной документации.