【问题标题】:Spring Boot/Spring Kafka SSL Configuration by environment variables impossibleSpring Boot/Spring Kafka SSL 通过环境变量配置是不可能的
【发布时间】:2018-12-21 07:08:15
【问题描述】:

我有一个与 Kafka 通信的 Spring Boot 应用程序。

我通过注入环境变量在生产中配置此应用程序。

对于 kafka,我可以使用环境变量配置大多数东西 - 引导服务器、ssl 信任库位置、ssl 信任库密码、组 ID、主题,例如:

SPRING_KAFKA_SSL_TRUSTSTORE-LOCATION: "file:/opt/app/jks/totally_real_file.jks"
SPRING_KAFKA_SSL_TRUSTSTORE-PASSWORD: "hunter2"

因为我可以使用环境变量配置 ssl 密钥库和密码,所以我假设我可以配置 SSL 协议和安全协议;例如:

SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL: "SSL"
SPRING_KAFKA_PROPERTIES_SSL_PROTOCOL: "SSL"

但是,我会假设不正确,因为当我在那里设置时,会出现一条消息:

The configuration 'SECURITY_PROTOCOL' was supplied but isn't a known config
The configuration 'SSL_PROTOCOL' was supplied but isn't a known config

出现更多消息!

Bootstrap broker one:9093 disconnected
Bootstrap broker two:9093 disconnected
Bootstrap broker more_than_two:9093 disconnected

这让我很难过。我在网上搜索。 我找到了链接:

Spring Kafka SSL setup in Spring boot application.yml

这没什么用,我想通过环境变量来配置...

我发现 github 问题链接(情况越来越糟):

https://github.com/spring-projects/spring-integration-kafka/issues/157

这提供了部分线索。

yml:

spring.kafka.properties.security.protocol: "SSL"

应该工作,但没有

yml:

spring:
  kafka:
    properties:
      security.protocol: "SSL"
      ssl.protocol: "SSL"

确实有效!但无法用环境变量来表示。

【问题讨论】:

    标签: java spring-boot ssl environment-variables spring-kafka


    【解决方案1】:

    我的解决方法是在我的 application.yml 中设置以下内容:

    spring:
      kafka:
        properties:
          security.protocol: "SSL"
          ssl.protocol: "SSL"
    

    我不喜欢这个解决方案,因为它需要我为 prod 和 SIT 构建不同的工件。 (SIT Kafka 没有启用 SSL 的事实是另一个问题,另一个问题)

    【讨论】:

    • 您可以在 YAML 中使用环境变量 - 请参阅我的答案的更新。
    • 我相信ssl.protocol不应该属于properties,而是高于:spring.kafka.ssl.protocol
    【解决方案2】:

    引导程序不可能考虑所有可能的 Kafka 属性。有这么多。仅支持一个子集作为第一类属性。

    您可以使用系统属性代替环境变量。

    编辑

    你可以这样做:

    spring:
      kafka:
        properties:
          security.protocol: ${SEC_PROT}
    

    【讨论】:

    • 系统属性是指代码中设置的属性还是捆绑到构建工件中的设置文件?如果没有,你能举个例子吗?我知道有太多设置需要提供一流的属性,但这必须是最常见的设置之一。
    • jvm 参数 -Dfoo=bar
    • 有没有Spring Boot支持Kafka配置的环境变量概览?
    • 直接启动支持的属性(在 IDE 中使用内容辅助)是 documented in the boot reference manual。所有其他任意属性都可以通过...properties 属性(全局、管理员、消费者、生产者)进行设置。有关如何使用环境变量,请参阅我的答案的更新。
    • 我很欣赏 Gary 的更新 - 我认为它指出了我在应用程序架构中遇到的真正问题。正如所写的那样,我认为我的问题没有“解决办法”。
    【解决方案3】:

    可能是环境变量名不正确。例如,而不是这个:

    SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL

    我认为您想使用特定于生产者/消费者的名称,例如:

    SPRING_KAFKA_PRODUCER_PROPERTIES_SECURITY_PROTOCOL

    SPRING_KAFKA_CONSUMER_PROPERTIES_SECURITY_PROTOCOL

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2022-01-12
      • 2022-01-25
      • 2019-08-03
      相关资源
      最近更新 更多