Клиент Vault Spring сохраняет свое подключение к vault

#java #spring-boot #hashicorp-vault #spring-vault

#java #spring-boot #hashicorp-vault #spring-vault

Вопрос:

У меня есть приложение spring-boot, которое использует vault для хранения своих секретов. Подключение к vault осуществляется с помощью выделенного класса с аннотацией @VaultPropertySource. Конфигурация подключения находится в файле bootstrap.yaml. Мне нужно подключение только при запуске приложения, чтобы прочитать все секреты, но я вижу, что spring продолжает проверять подключение на протяжении всего срока службы приложения, поэтому, если я закрою vault, мое приложение завершит работу из-за потери подключения. Итак, мой вопрос в том, как я могу настроить spring так, чтобы он не сохранял подключение после запуска приложения.

Примечание: я знаю конфигурацию с отказоустойчивостью, но это очень общая конфигурация. Я хочу, чтобы мое приложение завершилось сбоем, если при запуске не будет подключения для чтения секретов, но я не хочу зависеть от vault на протяжении всего срока службы приложения.

Ответ №1:

Именно так мы настроили нашу настройку с помощью spring config server:

Добавьте информацию о зависимостях для клиентов в pom.xml

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-vault-config</artifactId>
     <version>1.1.0.RELEASE</version>
</dependency>
  

Добавьте конфигурацию хранилища в bootstrap.yml

 spring:
  cloud:
    config:
      uri: ${CONFIG_SERVER_URI}
      username: ****
      password: ****
    vault:
      uri: ${VAULT_URI}
      authentication: token
      token: ${SPRING_CLOUD_VAULT_TOKEN}
  application:
    name: APP-NAME
  

Предоставьте необходимые аргументы при запуске jar.

 exec java $JAVA_OPTS -jar -Drun.arguments=--spring.cloud.config.uri=${CONFIG_SERVER_URI} 
     -Drun.arguments=--spring.cloud.vault.uri=${VAULT_URI} 
     -Dspring.cloud.vault.token=${SPRING_CLOUD_VAULT_TOKEN} 
     APP-NAME.jar
  

Надеюсь, это поможет.

Комментарии:

1. Спасибо за ответ. Теперь, если ваше хранилище завершает работу, видите ли вы какую-либо ошибку в своем приложении?

2. Нет, у него нет зависимости, поскольку все необходимые секреты извлекаются из Vault во время запуска приложения.

3. Спасибо. Фактически конфигурация аналогична, за исключением части конфигурации, которая находится в файле application.properties. Я думаю, что моя проблема возникает из самого моего приложения. Возможно, мой класс свойств хранилища создается снова и снова в течение срока службы приложения.