Docker容器技术:DockerSecret管理和使用

141 阅读2分钟

之前我们部署的一些service存在一些密码相关的字段,如果通过docker compose写到yml里面肯定是不安全的,所以需要一种安全的方式来管理和使用

1. secret包括什么

先看一下swarm的架构,cluster里面有manager和worker两种角色,节点内置分布式存储,可以保证manager节点内部数据可以同步,一般manager节点至少要有两个,避免单点故障。

此外,存在内置分布式存储的数据是加密存到硬盘的,所以有一个天然的加密环境。所以想存一些secret也是可以的,可以存到manager节点内置的分布式存储中。此时如果有一个servcie想用,可以给一个密码让其访问。

2. secret managerment

image.png

3. 创建secret

3.1 文件读取密码

这里我们基于secret命令来创建,首先我们新建一个password文件,随便输一个密码作为内容,然后基于secret创建:

接着我们创建完了之后建议把password文件删除掉,这样密码不容易丢失,接着通过ls命令可以看到一些secret:

3.2 通过echo输入密码

echo "adminadmin" | docker secret create my-pw2

4. service如何使用secret

可以指定一个暴露的secret,可以在创建service的时候加入该参数--secret,这样该service就能访问到该secret:

接着我们进入这个busybox这个container里面,然后进入/run/secrets目录里面就可以可以看到password文件和明文,主要就是创建的时候传入就可以了。

当然可以通过多个--secret参数来传入多个secret文件,这里我们可以看个mysql的例子:

接着我们基于secret和环境变量来创建一个mysql:

然后我们去他部署到的work1节点上面,进入mysql内部看看该路径有没有secret:

然后我们通过mysql登录,输入该密码,成功进入~:

5. 在stack中使用secret

这里原先是通过yml定义一个stack,这里我们还是以wordpress举例:

这里通过secrets字段指定了secret文件,mysql也是一样:

此外也可以在yml文件中专门定义一个section,然后索引文件(这种方法会有一点隐患,不推荐,还是独立先把secret创建好再使用):

接着如果wordpress可以成功安装就代表用的mysql密码是对的也传输过去了~