gpt4 book ai didi

spring-boot - Spring Boot 重新解释 ConfigTree 变量

转载 作者:行者123 更新时间:2023-12-05 04:33:22 25 4
gpt4 key购买 nike

我正在尝试让我的 Spring Boot 应用程序配置来自 Kubernetes Secret 的数据源连接。由于安全要求,我不能在部署描述符中使用 envFrom/secretRef 组合。所以我正在尝试使用 Spring 的配置树导入来访问这些 secret 。

(并非所有值都是 secret ,但是,它们都是从我无法作为 secret 控制的 Operator 传给我的。)

我的应用程序的 application.yml 具有以下内容:

spring:
config:
import: "optional:configtree:/etc/secrets/"
datasource:
url: jdbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_APP_DB}
username: ${POSTGRES_APP_USERNAME}
password: ${POSTGRES_APP_PASSWORD}

我的部署描述符中有一个如下所示的 volume/volumeMount:

volumes:
- name: postgres-operator
secret:
secretName: postgres
items:
- key: POSTGRES_HOST
path: HOST
- key: POSTGRES_PORT
path: PORT
- key: POSTGRES_APP_DB
path: APP_DB
- key: POSTGRES_APP_USERNAME
path: APP_USERNAME
- key: POSTGRES_APP_PASSWORD
path: APP_PASSWORD

...

volumeMounts:
- name: postgres-operator
mountPath: "/etc/secrets/postgres"
readOnly: true

我已验证这些 secret 已按预期安装在我的 Pod 的文件系统中,并且我创建了一个 ConfigurationProperties 类,该类接收预期的属性并显示值。但是,当 Spring Data JPA 尝试初始化时,出现如下错误:

Hostname "${POSTGRES_HOST}" not found

这让我觉得 Spring 无法为其他属性重新解释 configtree 导入的属性。这是真的?有其他方法可以解决这个问题吗?

最佳答案

您将配置树基本路径设置为 /etc/secrets/。您将 secret 值批量装载到文件 /etc/secrets/postgres/HOST 中。 Configtree 将子目录路径转换为配置属性名称上以点分隔的前缀,因此可以从配置属性名称 postgres.HOST 中读取 secret 值。

关于spring-boot - Spring Boot 重新解释 ConfigTree 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71442362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com