В Spring Cloud Server добавляет другие свойства в существующую среду
Мы используем сервер конфигурации Spring Cloud с резервным хранилищем git для предоставления свойств тестового профиля. Мы получили требование перенести наши ключи в хранилище (hashicorp) и сохранить обычные свойства, как обычно, в нашем файле свойств.
Прежде чем иметь хранилище, мы передавали ключи через системное свойство (используя -Dxxx=yyy
), который был загружен как обычный источник свойств, и приложение работает, как и ожидалось.
Теперь я должен иметь составные свойства источников для извлечения из файла свойств, а также из хранилища одновременно. Я не уверен, как извлекать свойства из хранилищ и из git одновременно, и предлагал их клиентам весеннего конфигурирования облака.
Я покопался в документации и обнаружил, что у нас может быть хранилище составной среды, однако я не могу заставить Vault и Git работать одновременно.
Я пробовал несколько вещей, таких как:
spring.cloud.config.server.git.uri=file:///E:/Project/git/myappdata
spring.cloud.config.server.vault.host=127.0.0.1
spring.cloud.config.server.vault.port=8200
spring.cloud.config.server.vault.scheme=http
spring.cloud.config.server.vault.backend=secret
spring.cloud.config.server.vault.defaultKey=myapp
Также тестировался с использованием весеннего облачного хранилища, и я мог получить секреты, однако они не были предоставлены моим клиентам.
Пытался использовать реализовать EnvironmentRepository
интерфейс, но это для создания нового хранилища (и я просто хочу добавить 1 свойство хранилища к существующему предоставленному хранилищу на основе git).
И собирался использовать весеннее событие ApplicationEnvironmentPreparedEvent и пытался динамически добавлять свойство хранилища.
Я думаю, что я что-то упускаю. Знаете ли вы, как правильно читать секрет хранилища и добавлять его в качестве свойства обычного файла свойств?
1 ответ
Возможно. Вам следует использовать несколько профилей для сервиса Spring Cloud Config.
spring:
profiles:
active: vault, git
cloud:
config:
server:
vault:
order: 1
git:
order: 2
uri: https://some-git-repo.com/
username: user
password: pass
С таким конфигом Vault и Git будут работать вместе. Вам также потребуется реализовать поддержку Vault Token и иметь ее в каждом клиенте конфигурации. С Vault это работает немного по-другому. Он не получит все свойства, как в Git. Когда клиент запрашивает какое-либо свойство с токеном, он отправляется в Vault и извлекает его. Если его нет, он пойдет и будет искать в git repo. Вы можете указать порядок в конфигурации.
Spring рекурсивно разрешает свойства, поэтому у вас может быть файл свойств, в котором заполнитель свойств будет храниться в git и обслуживаться сервером конфигурации (application.yml):
database:
password: ${database.secure.password}
и конфиденциальное свойство хранится в хранилище, например
vault write secret/clientAppName database.secure.password=SuperSecurePassword
Spring Cloud автоматически разрешит ваше свойство ${database.password}.