在Spring Boot应用程序中提取docker密码,而不是使用属性文件 [英] extracting docker secret in spring boot app instead of using properties file

查看:26
本文介绍了在Spring Boot应用程序中提取docker密码,而不是使用属性文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在扩展坞群堆栈上运行一个Spring Boot应用程序,并希望使用扩展坞秘密来获取令牌秘密、API密钥等……用以下合成文件创建秘密并使它们在我运行的docker容器中可用是没有问题的:

version: "3.7"
services:
  app:
    image: myimage
    environment:
      tokenSecret: /run/secrets/tokenSecret
      apiKey: /run/secrets/apiKey
    secrets:
      - tokenSecret
      - apiKey

  frontend:
    .....

  db:
    .....

secrets:
  tokenSecret:
    external: true
  apiKey:
    external: true

密钥创建者printf some_secret | docker secret create tokenSecret -

在使用docker密码之前,我将属性存储在application.properties文件中:

tokenSecret: some_secret
apiKey: some_key

并可通过以下方式访问它们:

@Component
public class AppProperties {

    private Environment environment;

    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    public String getTokenSecret(){
        return environment.getProperty("tokenSecret");
    }

    public String getApiKey(){
        return environment.getProperty("apiKey");
    }
}
现在,getTokenSecretgetApiKey方法通过使用docker密钥并删除应用程序属性,返回了密钥在docker容器中的文件位置:"/run/secrets/tokenSecret",而不是密钥的内容。将秘密的内容从容器文件系统加载到我的应用程序似乎是一项简单的任务,但我仍然不知道最好的方法是什么。

docker

最简单的方法是向您的推荐答案文件添加一个自定义docker-entry-point t.sh,它将打开该文件。 类似于:

#!/bin/sh

export TOKEN_SECRET=${TOKEN_SECRET:=`cat ${TOKEN_SECRET_FILE}`}

java -noverify -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom -jar app.jar

和堆栈的docker-compose.yml中:

version: '3.7'

services:
  serviceName:
    ...
    environment:
      TOKEN_SECRET_FILE: /run/secrets/tokenSecret
    secrets:
      - tokenSecret

secrets:
  tokenSecret:
    external: true

如此一来,对于开发环境(没有Sarm),您可以像以前一样,简单地传递未加密的开发机密的TOKEN_SECRET

这篇关于在Spring Boot应用程序中提取docker密码,而不是使用属性文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆