我正在尝试获得我的Spring应用程序来配置来自Kubernetes秘密的数据源连接。由于安全性要求,我无法在部署描述符中使用envFrom/secretRef组合体。因此,我试图使用Spring的configtree导入来访问秘密。
(并不是所有的值都是秘密,但是,它们都来自我无法作为秘密控制的操作符。)
我的应用程序的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}在部署描述符中有一个类似于以下内容的卷/卷安装:
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我已经验证了秘密是否按预期的方式挂载在我的Pod文件系统中,并且我创建了一个ConfigurationProperties类,它接受预期的属性并显示值。但是,当Spring数据JPA尝试初始化时,我会得到以下错误:
Hostname "${POSTGRES_HOST}" not found这使我认为Spring无法为其他属性重新解释导入的configtree属性。这是真的吗?还有别的办法可以解决这个问题吗?
发布于 2022-03-14 17:39:32
您将configtree基路径设置为/etc/secrets/。卷将秘密值挂载到文件/etc/secrets/postgres/HOST中。Configtree将子目录路径转换为配置属性名称上的点分隔前缀,因此可以从配置属性名称postgres.HOST读取秘密值。
https://stackoverflow.com/questions/71442362
复制相似问题