0

我正在尝试ConfigMap使用 Spring 支持 K8s API 来处理我的外部化配置。我一直在使用没有任何问题的配置服务,所以我不认为这是一个云配置实现问题。我正在1.0.2.RELEASE使用spring-cloud-starter-kubernetes-config.

MyConfigMap包含两个配置:全局 (application.yml) 和特定于应用程序的 yaml (myapp.yml)。看起来是这样的:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  application.yml: |-
    kafka:
      hosts: kafka:9092

      topics:
        events: myapp-events
        normalized: myapp-normalized
        #...

    storage:
      uri: mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017,mongo-2.mongo:27017
      database: do-stuff-db
      #...

    spring:
      cloud:
        config:
          override-system-properties: false

    #...

  myapp.yml: |-
    myapp:
      broadcast-address: 0.0.0.0:666

      #...

application.yml似乎工作得很好。我可以在我的应用程序中看到配置值,但无论出于何种原因,myapp.yml都没有设置。我可以看到 Spring 成功地从 API 中获取了整个结果,ConfigMap但它对myapp.yml.

打开调试日志会暴露 Spring 是如何解释ConfigMap结果的。它将整个myapp.yml部分视为一个财产,而不是其自己的财产来源。这解释了为什么application.yml要使用而不是myapp.yml. 这是该日志的样子(我已经截断了消息):

2019-09-04 14:01:37.083 [main] INFO  config.PropertySourceBootstrapConfiguration - Located property source: CompositePropertySource {name='composite-configmap', propertySources=[ConfigMapPropertySource@92864491 {name='configmap.myapp-config.default', properties={kafka.hosts=kafka:9092, kafka.topics.events=myapp-events, kafka.topics.normalized=myapp-normalized, myapp.yml=myapp:
  bind-address: 0.0.0.0:666

  #...

    storage.uri: mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017,mongo-2.mongo:27017, storage.database: do-stuff-db}}]}

我需要分离这些配置吗?我从 Spring 中看到的示例建议您可以将配置合并到单个 YAMLConfigMap文件中。我难住了。

4

0 回答 0