В Spring Cloud Server добавлены другие свойства в существующую среду.

Мы используем облачный конфигурационный сервер Spring с поддерживаемым репозиторием git, чтобы предоставить свойства для тестового профиля. Мы получили требование переместить наши ключи в хранилище (hashicorp) и сохранить обычные свойства в нашем файле свойств, как обычно.

До создания хранилища мы передавали ключи через системное свойство (с использованием -Dxxx=yyy), которое было загружено как обычный источник свойств, и приложение работает должным образом.

Теперь у меня должны быть составные источники свойств, которые можно получить одновременно из файла свойств и из хранилища. Я не уверен, как одновременно извлекать свойства из хранилища и git и предлагать их клиентам весенней облачной конфигурации.

Я покопался в документации и обнаружил что у нас может быть репозиторий составной среды, однако я не могу заставить работать хранилище и 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 и попытался динамически добавить свойство хранилища.

Думаю, я что-то не замечаю. Знаете ли вы, как правильно прочитать секрет хранилища и добавить его как свойство обычного файла свойств?


person Federico Piazza    schedule 12.09.2017    source источник


Ответы (1)


Возможно. Вам следует использовать несколько профилей для Spring Cloud Config Service.

    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. Вы можете указать порядок в конфигурации.

Spring рекурсивно разрешает свойства, поэтому у вас может быть файл свойств, в котором будет заполнитель свойств, хранящийся в git и обслуживаемый сервером Config (application.yml):

database:
  password: ${database.secure.password}

и конфиденциальное свойство, хранящееся в Vault, например

vault write secret/clientAppName database.secure.password=SuperSecurePassword

Spring Cloud автоматически разрешит ваше свойство $ {database.password}.

person nmyk    schedule 28.02.2018