0

我目前在一个项目中工作,该项目的客户端需要相对较高的安全级别,并且生产数据库密码不与我们开发人员共享。

我正在使用Quarkus version 1.9.2.Final部署在Docker Swarm. 我想知道是否有办法将数据源密码存储在 Docker Secret 中并在我的application.properties文件中使用该密码

我的 application.properties 文件

quarkus.datasource.db-kind=other
quarkus.hibernate-orm.dialect=org.hibernate.dialect.Oracle12cDialect
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
quarkus.datasource.jdbc.driver=oracle.jdbc.driver.OracleDriver
quarkus.datasource.jdbc.url=${db-url}
quarkus.datasource.username=${db-user}
quarkus.datasource.password=${db-pass}
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE

我的 pom.xml 配置文件:

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <db-url>jdbc:oracle:thin:@//host:1521/dbname</db-url>
            <db-user>dbuser</db-user>
            <db-pass>dbpass</db-pass>
        </properties>
    </profile>

    <profile>
        <id>prod</id>
        <properties>
            <db-url>jdbc:oracle:thin:@//prod-host:1521/dbname</db-url>
            <db-user>prod-dbuser</db-user>
            <db-pass>prod-dbpass</db-pass>
        </properties>
    </profile>
</profiles>

我的 compose.yml 文件:

version: "3.1"

services:
  myappservices:
    image: myapp
    deploy:
      replicas: 4
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 20s
    ports:
      - "8080:8080"
    hostname: myapp-node{{.Task.Slot}}
    volumes:
      - "/usr/local/myapp:/usr/local/myapp"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 1m30s
      timeout: 10s
      retries: 3

目标是以下之一:

  1. 用Docker Secret 中的数据库密码替换prod-dbpass我的文件中的。pom.xml

或者

  1. 从文件中完全删除该db-pass属性,并使用来自 Docker Secret 的数据库密码在文件中设置该属性。pom.xmlquarkus.datasource.passwordapplication.properties
4

1 回答 1

1

您可以只定义一个QUARKUS_DATASOURCE_PASSWORD环境变量。

这就是您为任何事物定义秘密的方式,无论是 Kubernetes 还是 Docker。

于 2021-01-14T19:54:44.873 回答