2017-02-06 4 views
4

Я пытаюсь настроить сервер конфигурации Spring Cloud, поддерживаемый секретным управлением Spring Cloud Vault. Я относительно новым для весны, но я попытался следующие инструкции и примеры здесь: -Настройка Spring Cloud Config Server и Spring Cloud Vault для производства

http://cloud.spring.io/spring-cloud-vault-config/

Все отлично работает при условии, вы будете следовать настройки по умолчанию, как HTTP, локальный и 8200 для хранилища конечных точек и tls_disable = 1 для отключения SSL. Однако это не практические настройки для какой-либо реальной среды, и в этом случае есть несколько примеров, которые помогут в этом. Может ли кто-нибудь помочь с рабочим примером?

Я успешно создал хранилище с поддержкой TLS. Я успешно настроил сервер конфигурации, который подключается с помощью самоподписанного сертификата. Я даже могу ввести секретное значение в конфигурационный сервер и выставить его через @Value и @PostConstruct.

Все это работает. Однако, когда я пытаюсь использовать Spring Conig конечных точки свода доступа, я получаю следующее: -

{ 
    "timestamp": 1486413850574, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.springframework.web.client.ResourceAccessException", 
    "message": "I/O error on GET request for \"http://127.0.0.1:8200/v1/secret/myapp\": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect", 
    "path": "/myapp/default" 
} 

Config сервер используют значения по умолчанию, даже если я установил переопределение в bootstrap.yml: -.

server: 
    port: 8888 

spring: 
    profiles: 
     active: vault 

spring.cloud.vault: 
    host: myhost.mydomain.com 
    port: 8200 
    scheme: https 
    authentication: TOKEN 
    token: 0f1887c3-d8a8-befd-a5a2-01e4e066c50 
    ssl: 
     trust-store: configTrustStore.jks 
     trust-store-password: changeit 

Как вы можете видеть, он должен указывать на myhost.mydomain.com не 127.0.0.1, и он должен использовать https, а не http как схему протокола.

Я не уверен, почему он использует эти значения по умолчанию для конечных точек сервера конфигурации, но использует правильные настройки во время запуска весеннего облачного хранилища. Я использую все последние стабильные сборки Spring Dalsten.M1 и Spring Cloud Vault 1.0.0.M1. Я понимаю, что это выпуски вехи. Я также пробовал комбо Камдена и Брикстона без везения. При необходимости я могу предоставить код.

Любая помощь очень ценится.

+1

http://cloud.spring.io/spring-cloud-vault-config/ не использует сервер конфигурации вообще. Он идет непосредственно в хранилище. Чтобы использовать конфигурационный сервер с хранилищем в качестве backend, см. Https://github.com/spring-cloud/spring-cloud-config/blob/master/docs/src/main/asciidoc/spring-cloud-config.adoc#vault- бэкенд. В противном случае измените заголовок, чтобы удалить конфигурационный сервер, и я рассмотрю вопрос как есть. – spencergibb

+0

Спасибо за быстрый ответ.Характер проблемы исходит из использования Spring Spring Config Server и Spring Cloud Vault Config Starter. Я уже добился определенных успехов в решении этого вопроса, который я опубликую как принятый ответ после этого ответа с некоторым уточнением вопроса. – Codesnooper

ответ

1

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

  1. Встаньте сервер конфигурации, который использует Vault в качестве движка, (в отличие от ГИТ по умолчанию бэкэндом в) и разоблачить Vault API для клиентских приложений (более TLS), так что они могут получить свои собственные секреты. Я не хочу, чтобы все мои клиентские приложения напрямую подключались к Vault. Я хочу, чтобы они получили конфигурацию с сервера конфигурации, подключив конфигурационный сервер к Vault. До прошлой ночи мне не удалось достичь этой цели, если я не установил все по умолчанию с отключенным TLS и использованием loopback-адреса, порт 8200 для программного обеспечения Vault и т. Д. Очевидно, что значения по умолчанию не применимы ни для одной из наших развернутых сред. Я упомянул, что ссылка, посланная spencergibb, помогает мне понять, почему это не работает, но тонкость причины - вот почему я пропустил ее раньше. Читайте дальше для моего объяснения.

  2. Я хочу, чтобы сервер конфигурации настраивался непосредственно из хранилища. То есть подключитесь к Vault через Spring Cloud Vault Config. Это сработало сразу для меня, как описано в документации. Однако эта цель несколько тривиальна, поскольку в настоящее время у меня нет реального варианта использования. Но я хотел понять, можно ли это сделать, поскольку я не видел реальной причины, почему бы и нет, и это казалось хорошим первым шагом в интеграции Сейфа.

Различия между этими двумя возможностями помог мне понять, что проблема проистекает из того факта, что Spring Cloud Config сервер и Spring Cloud Vault по всей видимости, с использованием двух различных бобов, чтобы придать свойство конфигурации Vault. Spring Cloud Config Server использует VaultEnvironmentRepository, аннотированный с помощью @ConfigurationProperties («spring.cloud.config.server.vault»), а Spring Cloud Vault использует VaultProperties, аннотированный с помощью @ConfigurationProperties («spring.cloud.vault»).

Это заставило меня добавить два разных конфигурационных файла в мой загрузочный yml.

server: 
    port: 8888 

spring: 
    profiles: 
     active: local, vault 

    application: 
     name: quoting-domain-configuration-server 

    cloud: 
     vault: 
      host: VDDP03P-49A26EF.lm.lmig.com 
      port: 8200 
      scheme: https 
      authentication: TOKEN 
      token: 0f1997c3-d8a8-befd-a5a2-01e4e066c50a 
      ssl: 
       trust-store: configTrustStore.jks 
       trust-store-password: changeit 

     config: 
      server: 
       vault: 
        host: VDDP03P-49A26EF.lm.lmig.com 
        port: 8200 
        scheme: https 
        authentication: TOKEN 
        token: 0f1997c3-d8a8-befd-a5a2-01e4e066c50a 

Обратите внимание на те же данные конфигурации. Просто разные пути yml. Это тонкая точка, которую я пропустил, учитывая, что я начал с того, что первым занял цель номер 1, и предполагая, что одна и та же конфигурация будет работать для обеих целей. (Примечание: маркер и пароль надуманны).

Это почти сработало, за исключением ошибки установления связи SSL. Как вы видите, нет атрибутов SSL, установленных в пути spring.cloud.config.server.vault. Компонент VaultProperties не поддерживает их. Я не был уверен, как справиться с этим (возможно, другим конкретным компонентом, отличным от хранилища, который я не смог найти). Мое решение состояло в том, чтобы просто настроить конфигурацию сертификата следующим образом: -

@SpringBootApplication 
@EnableConfigServer 
public class Application 
{ 
    public static void main(String[] args) 
    { 
     System.setProperty("javax.net.ssl.trustStore", 
      Application.class.getResource("/configTrustStore.jks").getFile()); 
     System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 
     SpringApplication.run(Application.class, args); 
    } 
} 

Это SSL-решение довольно уродливое. Я уверен, что должен быть лучший способ сделать эту часть. Поэтому я открыт для других предложений. Однако, как только я закончил все вышеперечисленные шаги, все теперь работает.

+0

Похоже, я мог использовать атрибуты server.ssl в yml, чтобы убрать это. – Codesnooper

1

Спасибо за вашу запись. Я изо всех сил пытался заставить это работать. Я смог получить клиентскую службу для подключения к серверу Spring Cloud Config и к серверу Vault, но мне не удалось подключить сервер конфигурации Spring Cloud для подключения к серверу Vault.

Я даже боролся после копирования конфигурации в свой сервер конфигурации Spring Cloud. В то время как я в конечном итоге получил его работу с вашей конфигурацией, я смог немного пошутить. Ключ заключался в том, что токен не принадлежит серверу Spring Cloud Config. Он принадлежит клиенту.

Я пытался http://localhost:8888/{application}/default в браузере, но получил следующее:

Whitelabel Error Page 

This application has no explicit mapping for /error, so you are seeing this as a fallback. 

Thu May 11 14:21:31 EDT 2017 
There was an unexpected error (type=Bad Request, status=400). 
Missing required header: X-Config-Token 

Я использовал Почтальон отправить запрос с X-Config-Token заголовка, содержащего Убежище маркер, и она работала.

Вот моя окончательная конфигурация.

server: 
    port: ${PORT:8888} 

management: 
    context-path: /manage 
    security: 
    enabled: true 

spring: 
    profiles: 
    active: git,vault 

    application: 
    name: config-server 

    cloud: 
    config: 
     server: 
     git: 
      order: 1 
      uri: file:///temp/config-server/config 

     vault: 
      order: 0 
      host: localhost 
      port: 8200 
      scheme: http 

Похоже, вам нужно добавить токен к клиенту. Возможно, используя spring.cloud.config.token.

0

вместо

@SpringBootApplication 
@EnableConfigServer 
public class Application 
{ 
    public static void main(String[] args) 
    { 
     System.setProperty("javax.net.ssl.trustStore", 
      Application.class.getResource("/configTrustStore.jks").getFile()); 
     System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 
     SpringApplication.run(Application.class, args); 
    } 
} 

написать

bootstrap yml -> 
javax.net.ssl.trustStore: /configTrustStore.jks 
javax.net.ssl.trustStorePassword: changeit 
Смежные вопросы