当前位置: 首页 > 知识库问答 >
问题:

为生产配置Spring Cloud Config Server和Spring Cloud Vault

咸承教
2023-03-14

只要遵循默认设置,如http、localhost和8200,存储库endpoint和tls_disable=1关闭SSL,一切都可以正常工作。然而,对于任何实际环境来说,这些都不是实用的设置,而且很少有任何地方的例子对此有所帮助。有人能提供一个可行的例子吗?

我已经成功地设置了启用TLS的保险库。我已经成功地设置了一个配置服务器,该服务器使用自签名证书进行连接。我甚至可以将一个秘密值注入配置服务器,并通过@value@PostConstruct公开它。

所有这些都奏效了。然而,当我试图利用Spring Conigendpoint访问vault时,我得到了以下结果:-

{
  "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"
}
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

我不知道为什么它对配置服务器endpoint使用这些默认值,但在spring cloud vault启动期间使用正确的设置。我使用的是Spring Dalsten.m1和Spring Cloud Vault 1.0.0.m1的所有最新稳定版本。我意识到这些是里程碑式的发布。我也试过卡姆登和布里克斯顿组合,但运气不好。如果需要,我可以提供代码。

非常感谢您的任何帮助。

共有1个答案

邹开畅
2023-03-14

正如我在对spensergibb的回应中提到的,我自己在解决这个问题上取得了一些成功。根据他的评论,我将澄清我的意图,因为这将有助于对这个问题达成共识。我想做两件事:-

>

  • 建立一个使用Vault作为后端的配置服务器(与默认的GIT后端相反),并将Vault API公开给客户机应用程序(通过TLS),以便它们能够检索自己的秘密。我不希望我的所有客户端应用程序直接连接到Vault。我希望他们通过配置服务器连接到Vault来从配置服务器获得他们的配置。直到昨晚,我还无法实现这个目标,除非我将所有内容设置为默认值,禁用TLS,并使用环回地址、8200端口用于Vault软件等。显然,默认值对于我们部署的任何环境都不实用。我会提到spencergibb发布的链接确实帮助我理解为什么这不起作用,但微妙的原因是为什么我以前错过了它。请继续阅读我的解释。

    我希望配置服务器从Vault直接配置自己。也就是说,通过Spring Cloud Vault Config连接到Vault。正如文档中所描述的那样,这对我来说很快就起作用了。然而,这个目标有点微不足道,因为我现在还没有一个真正的用例。但我想知道是否可以这样做,因为我看不出真正的理由为什么不这样做,这似乎是集成Vault的良好的第一步。

    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不支持它们。我不确定如何处理这个问题(可能是另一个我找不到的非Vault特定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解决方案非常难看。我相信一定有更好的方法来做这部分。所以我对其他建议持开放态度。然而,一旦我完成了以上所有步骤,现在一切都工作了。

  •  类似资料:
    • 问题内容: 我将docker用于laravel项目的开发和生产。我用于开发和生产的dockerfile略有不同。例如,我在开发环境中将本地目录安装到docker容器中,因此我不需要为代码中的每个更改进行docker构建。 由于挂载目录仅在运行docker容器时可用,因此无法在开发文件中将诸如“ composer install”或“ npm install”之类的命令放入dockerfile中。

    • 我使用docker为laravel项目开发和生产。我有一个稍微不同的dockerfile用于开发和生产。例如,我在开发环境中将本地目录装载到docker容器中,这样我就不需要为代码中的每个更改进行docker构建。 由于挂载目录只有在运行docker容器时才可用,因此我无法将“composer install”或“npm install”之类的命令放入dockerfile中进行开发。 目前,我正在

    • 问题内容: 如何将Hudson / Jenkins配置到生产环境并使用相同的配置进行部署? 我在Jenkins中配置了一个构建和部署工作流来进行生产推送。现在,我需要使用相同的配置来进行暂存推送,希望这两个文件夹和数据库名称将更改以反映阶段。即从to 和db from 到。 我不想复制配置,因为可能必须在一个地方更改配置,然后我必须对每个副本进行重复更改。理想情况下,我想通过传递一些参数来尝试 问

    • 我已经做了以下的服务器配置为点燃。 这里是说非堆内存空闲为-1%。在数据区域配置中,我给出了最小1 gb和最大2 gb内存。知道如何处理这些非堆内存吗?

    • 我需要设置Kafka生产商发送500 msg在一批不是由味精味精,但批量进口味精。我查过了https://github.com/dpkp/kafka-python/issues/479并尝试了但失败并出现错误: 我也试着像《代码》制作人一样通过考试。制作(主题,*消息)失败: 因此,我挖掘了更多信息,发现我必须在producer配置中将类型设置为async和batch。大小要大于默认值,但当我尝试

    • 我使用的是Kafka producer客户端,我的项目中没有任何log4j配置。 在运行时,程序打印了大量的Kafka调试日志,这是我不想要的。