正如我在回答spensergibb时提到的那样,我自己解决了这个问题.根据他的评论,我将澄清我的意图,因为这将有助于对该问题的共同理解.我试图做两件事: –
>站起一个使用Vault作为后端的配置服务器(与默认的GIT后端相对),并将Vault API暴露给客户端应用程序(通过TLS),以便他们可以检索自己的秘密.我不希望我的所有客户端应用程序直接连接到Vault.我希望他们通过让配置服务器连接到Vault来从配置服务器获取配置.直到昨晚我都无法实现这一目标,除非我将所有内容设置为默认情况下禁用TLS并使用环回地址,端口8200用于Vault软件等.显然默认设置对于我们任何部署的环境都不实用.我会提到spencergibb发布的链接确实帮助我理解为什么这不起作用,但原因的微妙之处在于我之前错过了它.请继续阅读我的解释.
>我希望配置服务器直接从Vault配置自己.也就是说,通过Spring Cloud Vault Config连接到Vault.如文档中所述,这对我来说很有效.然而,这个目标有点微不足道,因为我目前没有真正的用例.但我想知道是否可以这样做,因为我没有找到真正的原因,这似乎是整合Vault的第一步.
这两种功能之间的区别帮助我理解问题源于Spring Cloud Config Server和Spring Cloud Vault似乎使用两个不同的bean来注入Vault配置属性. Spring Cloud Config Server使用带有@ConfigurationProperties(“spring.cloud.config.server.vault”)注释的VaultEnvironmentRepository,Spring Cloud Vault使用带有@ConfigurationProperties(“spring.cloud.vault”)注释的VaultProperties.
这导致我为我的bootstrap 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握手错误.如您所见,spring.cloud.config.server.vault路径上没有设置SSL属性. VaultProperties bean不支持它们.我不知道如何处理这个问题(也许是另一个我找不到的非特定于库的特定bean).我的解决方案是简单地自己强制执行证书配置: –
@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解决方案非常难看.我确信必须有更好的方法来完成这一部分.所以我愿意接受其他建议.但是,一旦我完成了上述所有步骤,现在一切正常