3

所以,我有一个看起来像这样的 yaml 文件:

service:
        users:
            - username: some-user
              password: some-pass (would be placed in Secret)
            - username: some-user
              password: some-pass (would be placed in Secret)

我需要将它添加到 env 中(在 Spring Boot 的优先级列表中,来自 env 的配置高于来自 yaml 的配置。这将基于 env(dev,stage,live))。我已经用 Kustomize 试过了

configMapGenerator:
    - name: my-java-server-props
      files:
      - config.yaml

然后在部署中使用它

envFrom:
  - configMapRef:
      name: my-java-server-props

config.yml 中的其他配置如下:

spring:
  datasource:
    url: some-url-here

然后为 configMapGenerator 添加 .properties 文件,如下所示:

spring_datasource_url=some-url-here

但是带有数组的配置似乎不起作用。

关于我在哪里错过了诀窍的任何提示?此外,密码来自 credstash;所以,我有一个不同的脚本,它从 credstash 获取值并为 Secret 创建一个清单。

添加密码的最终目标在 Deployment 中是这样的:

name: service_users.0.password
      valueFrom:
        secretKeyRef:
          key: value
          name: service-user-store-password
4

1 回答 1

3

这是前一段时间spring boot中的一个问题,支持将环境变量绑定到数组元素。在 spring boot wiki 上有一个很好的文档来描述解决方案:https ://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0 。

总而言之,数组元素可以使用i进行索引,因此在您的情况下:

env:
- name: SERVICE_USERS_0_PASSWORD
  valueFrom:
    secretKeyRef:
      key: value
      name: service-user-store-password
- name: SERVICE_USERS_1_PASSWORD
  valueFrom:
    secretKeyRef:
      key: value
      name: service-another-user-store-password
于 2019-09-02T15:41:53.917 回答