标签:容器 my secret 108 Swarm15 mysql docker root Secret
参考https://www.cnblogs.com/CloudMan6/p/8068057.html 我们经常要想容器传递敏感信息,最常见的就是密码。比如: docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql 在启动 Mysql 容器时,我们通过环境变量 MYSQL_ROOT_PASSWORD 设置 mysql 的管理员密码。不过密码是以明文的形式写在了 docker run 命令中,有潜在的安全隐患。 为了解决这个问题, docker swarm 提供了secret 机制,允许将敏感信息加密后保存到secret 中,用户可以指定哪些容器可以使用此 secret。 如果使用 secret 启动 Mysql 容器,方法是: root@host03:~# echo 'my-secret-pw' | docker secret create my_secret_data1 - # 创建一个secret z04oyb43x6brtvpdel6bqc7rv root@host03:~# docker secret ls # 查看 secret 列表 ID NAME DRIVER CREATED UPDATED z04oyb43x6brtvpdel6bqc7rv my_secret_data1 7 seconds ago 7 seconds ago root@host03:~# docker secret inspect my_secret_data1 # 查看 secret详细信息 [ { "ID": "z04oyb43x6brtvpdel6bqc7rv", "Version": { "Index": 13493 }, "CreatedAt": "2019-05-16T02:05:11.083477558Z", "UpdatedAt": "2019-05-16T02:05:11.083477558Z", "Spec": { "Name": "my_secret_data1", "Labels": {} } } ] root@host03:~# docker service create --name mysql --secret source=my_secret_data1,target=mysql_root_password -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" mysql 4epm4b3arpzetqra3vuveqgq5 overall progress: 1 out of 1 tasks 1/1: running [==================================================>] verify: Service converged root@host03:~# docker service ps mysql ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 8icyti1vg03n mysql.1 mysql:latest host02 Running Running 5 minutes ago root@host02:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74ae17815637 mysql:latest "docker-entrypoint.s…" 57 seconds ago Up 56 seconds 3306/tcp, 33060/tcp mysql.1.8icyti1vg03nlmp87zna0vw4g root@host02:~# docker exec mysql.1.8icyti1vg03nlmp87zna0vw4g cat /run/secrets/mysql_root_password # 在容器中可以看到未加密的密码 my-secret-pw docker service create --name mysql \ --secret source=my_secret_data1,target=mysql_root_password \ # source指定容器使用secret后,secret会被解密并存放到容器中 /run/secret/<filename>,其中filename由tatget指定 -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \ # 环境变量 MYSQL_ROOT_PASSWORD_FILE 从容器中指定的文件 /run/secret/<filename> 中获得(明文) mysql 这里可能会有两个问题: 1、在第一步创建secret时,不是也使用明文了吗?这跟在环境变量中直接指定密码有什么不同? 在我们的例子中创建secret和使用secret是分开完成的,其好处是将密码和容器解耦。secret可以有专人(比如管理员)负责,而运行容器的用户只需要使用secret但并不需要知道secret的内容。也就是说例子中的两个步骤可以由不同的人在不同的时间完成。 2、secret是以文件形式mount到容器中,容器怎么知道去哪里读取呢? 这需要image的支持,如果image希望他部署出来的容器能够从secret中读取数据,那么此image就应该提供一种方式,让用户能够制定secret的位置。最常用的方法就是通过环境变量,Docker的很多官方image都采用这种方式,比如Mysql镜像同事提供了MYSQL_ROOT_PASSWORD 和 MYSQL_ROOT_PASSWORD_FILE 两个环境变量。标签:容器,my,secret,108,Swarm15,mysql,docker,root,Secret 来源: https://www.cnblogs.com/www1707/p/10880830.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。