在 application.properties spring boot 应用程序中读取作为卷安装的 kubernetes 机密

Posted

技术标签:

【中文标题】在 application.properties spring boot 应用程序中读取作为卷安装的 kubernetes 机密【英文标题】:read kubernetes secrets mounted as volume in application.properties spring boot application 【发布时间】:2021-10-30 09:28:23 【问题描述】:

我创建了 kubenertes 秘密

echo -n 'myusername' > username.txt
echo -n 'pa55word' > password.txt
kubectl create secret generic esb-database-secret-vol --from-file=username.txt --from-file=password.txt

我将 pod 清单创建为

spec:
  containers:
  - image: data-api-0.0.1.jar
    ports:
    - containerPort: 8080
    name: esb-data-api
    imagePullPolicy: Never
    resources: 
    volumeMounts:
    - name: esb-secret-vol
      mountPath: "/etc/confidential"
      readOnly: true
  volumes:
  - name: esb-secret-vol
    secret:
      secretName: esb-database-secret-vol

我验证了 pod /etc/confidential 文件夹中现在可以使用机密

这些值如何在 application.properties 中可用,以便我可以获得数据库连接

spring.datasource.url=jdbc:sqlserver://mycompany.com;databaseName=My_DB
# need to read from /etc/confidential/username.txt
spring.datasource.username=??????
# need to read from /etc/confidential/password.txt  
spring.datasource.password=??????
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

【问题讨论】:

【参考方案1】:

您有多种选择:

    提供已在正确写入的属性文件中的数据 使用 init 容器来使用机密数据并使用 shell 脚本创建属性文件

第一种方法看起来像

echo 'spring.datasource.username=myusername' >> app.properties
echo 'spring.datasource.password=pa55word' >> app.properties
kubectl create secret generic esb-database-secret-vol --from-file=app.properties

您稍后将在容器中以application.properties 的形式安装秘密。

【讨论】:

以上是关于在 application.properties spring boot 应用程序中读取作为卷安装的 kubernetes 机密的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 配置文件: application.properties和application.yaml

Quarkus如何在application.properties中设置环境变量

如何在 application.properties 中设置文件夹位置?

springboot~application.properties和application.yml的使用

无法在 Spring Boot 应用程序中读取 application.properties

配置文件application.properties剥离