之前我们部署的一些service存在一些密码相关的字段,如果通过docker compose写到yml里面肯定是不安全的,所以需要一种安全的方式来管理和使用
1. secret包括什么
先看一下swarm的架构,cluster里面有manager和worker两种角色,节点内置分布式存储,可以保证manager节点内部数据可以同步,一般manager节点至少要有两个,避免单点故障。
此外,存在内置分布式存储的数据是加密存到硬盘的,所以有一个天然的加密环境。所以想存一些secret也是可以的,可以存到manager节点内置的分布式存储中。此时如果有一个servcie想用,可以给一个密码让其访问。
2. secret managerment
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密码是对的也传输过去了~