【问题标题】:Read k8s secrets as env varaible in Java spring application.properties在 Java spring application.properties 中将 k8s 机密读取为 env 变量
【发布时间】:2020-10-21 23:22:55
【问题描述】:

我必须在 JAVA SpringBoot 应用程序中传递环境变量。

我已经创建了 k8s 机密。我在 k8s 部署 YAML 中将它们作为环境变量 USER_NAME 和 USER_PWD 传递。

但是如何在 application.properties 文件中读取这些环境变量。 我试过 ${USER_NAME} 但它不起作用。

例如。来自 application.properties 文件。

spring.datasource.username=${USER_NAME}

【问题讨论】:

  • 这仅在属性已在 Spring Boot 属性源下进行操作时才有效。然而,在你创建了 k8s secret 之后,这一切还没有在 spring 属性源中进行操作。
  • 但你所做的似乎是正确的。登录你的容器,检查环境变量是否真的存在

标签: java spring-boot kubernetes environment-variables


【解决方案1】:

你的部署 yml 应该是这样的

kind: Deployment
apiVersion: apps/v1
metadata:
  name: 
spec:
    ...
    spec:
      containers:
        ...
        env:
         - name: spring.datasource.password
           valueFrom:
            secretKeyRef:
             name: your-secret-name
             key: your-secret-key

Kubernetes 会将您的 spring.datasource.password 及其值添加到您的 pod 环境变量中。

要让 Spring boot 使用它,您应该在 application.properties 或 application.yml 中添加属性 spring.datasource.password。

【讨论】:

    【解决方案2】:

    谢谢,已经解决了。

    我还需要在运行 JAR 时传递变量。

    例如。来自 application.properties 文件。

    spring.datasource.username=${USER_NAME}

    在 Dockerfile 中

    ENTRYPOINT exec java -DUSER_NAME=$USER_NAME -DUSER_PWD=$USER_PWD -jar jar-name.jar

    【讨论】:

    • 如果您觉得有用,请点赞 user8794331 的答案或接受它。
    • @Nick 我没有尝试使用他的答案进行设置,所以我无法确认。
    猜你喜欢
    • 2022-07-21
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2020-06-28
    • 1970-01-01
    • 2020-10-02
    • 2021-08-23
    相关资源
    最近更新 更多