【发布时间】:2020-07-22 17:39:06
【问题描述】:
问题:我有一个非常简单的带有硬编码数据库连接字符串的 spring boot api。我想从我的 K8s 集群中的一个 pod 提供这些连接字符串,但是我在告诉 api 从 env 变量中读取时遇到了问题。
我的 Dockerfile:
FROM gcr.io/distroless/java:8
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这是 db-secret.yaml 文件:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
data:
host: XXXX
user: XXXX
password: XXXX
database: XXXX
这是我的 api pod 我的部署文件的 env 部分:
env:
- name: ORIGIN
value: https://myclient.app.com
- name: HOST
valueFrom:
secretKeyRef:
name: db-secret
key: host
- name: PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
- name: USERNAME
valueFrom:
secretKeyRef:
name: db-secret
key: user
- name: DATABASE
valueFrom:
secretKeyRef:
name: db-secret
key: database
这是我的 Java application.properties 文件:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=${HOST}/"todos"
spring.datasource.username=${USERNAME}
spring.datasource.password=${PASSWORD}
但是...当我尝试使用 ./mvnw clean package 构建应用程序时,我得到: * java.lang.IllegalStateException: 无法加载 ApplicationContext * BeanCreationException:创建名为“entityManagerFactory”的bean时出错
我尝试通过命令行导出变量,但没有奏效。我知道节点有 process.env.SOME_VAR。 Java有这样的东西吗?我已经梳理了一段时间的互联网并尝试了不同的解决方案,但目前没有太多工作。
【问题讨论】:
-
您的构建失败,因此您甚至还没有到达 Kubernetes 集群,因此您的问题可能与其他问题有关。如果你直接注入你的凭据和 URL,你仍然有同样的错误吗?此外,该错误消息必须继续存在,说明无法创建
entityManagerFactory的原因。可以查一下吗? -
您是否按照本文所述配置您的秘密:developers.redhat.com/blog/2017/10/04/…?
标签: java spring spring-boot kubernetes dockerfile