一、简介

  在微服务架构应用中,众多组件在集群中动态地创建、伸缩、更新。在如此动态和大规模的分布式系统上,管理和分发密码、证书等敏感信息将会是非常具有挑战性的工作。对于容器应用,传统的秘密分发方式,如将秘钥存放在容器镜像中,或是利用环境变量,volume动态挂载方式动态传入都存在着潜在的安全风险。

  为了应对这个问题,在Docker 1.13及更高版本中,Docker推出了Secrets管理,可以在Swarm mode集群中安全地管理密码、密钥证书等敏感信息,并允许在多个Docker容器实例之间共享访问指定的秘密信息。

二、基本功能和应用

  注: docker secret 只能从Docker Swarm模式的manager节点调用,如果你在本机进行试验,请先执行 docker swarm init 命令

  Docker命令行工具提供了docker secret命令来管理敏感信息  

  1. # docker secret --help
  2.  
  3. Usage: docker secret COMMAND
  4.  
  5. Manage Docker secrets
  6.  
  7. Options:
  8.  
  9. Commands:
  10. create Create a secret from a file or STDIN as content
  11. inspect Display detailed information on one or more secrets
  12. ls List secrets
  13. rm Remove one or more secrets

  其中 docker secret create 支持从标准输入读取信息,并且存入指定的secret

  (1)创建两个secrets

  1. # echo "Password4DB" | docker secret create db_password -
  2. anyyxxynb6r9ra9698f38c86x
  3.  
  4. # echo "Password4Root" | docker secret create root_password -
  5. 8ipun85hi89ibsg5ftp3l3uda

  

  1. # docker secret ls
  2. ID NAME DRIVER CREATED UPDATED
  3. anyyxxynb6r9ra9698f38c86x db_password 3 minutes ago 3 minutes ago
  4. 8ipun85hi89ibsg5ftp3l3uda root_password 3 minutes ago 3 minutes ago

  (2)创建一个db服务,并引用secret作为数据库和root密码   

  1. # docker service create \
  2. --name my-db \
  3. --publish 3306:3306 \
  4. --secret db_password \
  5. --secret root_password \
  6. -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password \
  7. -e MYSQL_USER=dbtest \
  8. -e MYSQL_DATABASE=dbtest \
  9. -e MYSQL_PASSWORD_FILE=/run/secrets/db_password \
  10. mysql  

  (3)检查服务状态   

  1. # docker service ls
  2. ID NAME MODE REPLICAS IMAGE PORTS
  3. b9rvq5wwln5p my-db replicated 1/1 mysql:latest *:3306->3306/tcp
  4.  
  5. # docker service ps my-db
  6. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
  7. 7hezr6rtkp0k my-db.1 mysql:latest node-03 Running Running 4 minutes ago

  (4)查看挂在到容器中的密码文件

  1. # docker exec -it 56d5845c6741 ls /run/secrets/
  2. db_password root_password
  3.  
  4. # docker exec -it 56d5845c6741 cat /run/secrets/db_password
  5. Password4DB
  6.  
  7. # docker exec -it 56d5845c6741 cat /run/secrets/root_password
  8. Password4Root

  (5)登入验证 

  1. # mysql -h host_ip -uroot -p
  2. Enter password:
  3. Welcome to the MariaDB monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 2
  5. Server version: 5.7.21 MySQL Community Server (GPL)
  6.  
  7. Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
  8.  
  9. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  10.  
  11. MySQL [(none)]> show databases;
  12. +--------------------+
  13. | Database |
  14. +--------------------+
  15. | information_schema |
  16. | dbtest |
  17. | mysql |
  18. | performance_schema |
  19. | sys |
  20. +--------------------+
  21. 5 rows in set (0.00 sec)

三、容器编排中使用 docker secret

  从 Docker Compose V3.1开始,支持在容器编排文件中使用 secret,这可以方便地在不同容器中分享所需的敏感信息。下面将使用 Compose 模板来构建一个Wordpress应用,通过 secret 实现 “wordpress”服务容器和“db”服务容器中共享数据库密码。

  (1)secret_stack.yml 

  1. version: "3.3"
  2. services:
  3. wordpress:
  4. image: wordpress:latest
  5. secrets:
  6. - wp_db_password
  7. ports:
  8. - "8080:80"
  9. environment:
  10. - WORDPRESS_DB_USER=wordpress
  11. - WORDPRESS_DB_NAME=wordpress
  12. - WORDPRESS_DB_PASSWORD_FILE=/run/secrets/wp_db_password
  13. - WORDPRESS_DB_HOST=mysql
  14. deploy:
  15. replicas: 3
  16. update_config:
  17. parallelism: 2
  18. delay: 10s
  19. restart_policy:
  20. condition: on-failure
  21.  
  22. mysql:
  23. image: mysql:latest
  24. secrets:
  25. - wp_db_password
  26. - root_db_password
  27. environment:
  28. - MYSQL_USER=wordpress
  29. - MYSQL_DATABASE=wordpress
  30. - MYSQL_PASSWORD_FILE=/run/secrets/wp_db_password
  31. - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_db_password
  32. deploy:
  33. replicas: 1
  34. restart_policy:
  35. condition: on-failure
  36. secrets:
  37. wp_db_password:
  38. external: true
  39. root_db_password:
  40. external: true

  (2)生成密码

  1. [root@manager stack_compose]# echo "Password4DB" | docker secret create wp_db_password -
  2. xtkut0zoe7u774aymwremncpj
  3. [root@manager stack_compose]# echo "Password4Root" | docker secret create root_db_password -
  4. nx22on48v96qdph2k3s7hs6mv

  (3)部署服务

  1. # docker stack deploy -c secret_stack.yml wordpress

  (4)查看部署情况  

  1. [root@manager ~]# docker service ls
  2. ID NAME MODE REPLICAS IMAGE PORTS
  3. xa450wyt625o wordpress_mysql replicated 1/1 mysql:latest
  4. otpkb5li30vx wordpress_wordpress replicated 3/3 wordpress:latest *:8080->80/tcp  

  (5)配置WordPress

  访问host_ip:8080

  

  

  

Docker Secrets的更多相关文章

  1. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json

    这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...

  2. Docker 1.13 管理命令

    1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 没有归类组织,这让docker 新手很难学习: 有些命令没有提供足够的上下文环境,以至于 ...

  3. 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh

    摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...

  4. Docker的基本操作与示例

    一.RunC RunC是一个由OCI(Open Container Initiative)制定的标准化轻量容器运行工具.OCI是专门致力于制定容器格式和运行时开放的工业化标准的组织.那容器标准化后Do ...

  5. Docker: docker container常用命令实战

    容器管理,容器常用选项 选项 描述 -i, –interactive 交互式 -t, –tty 分配一个伪终端 -d, –detach 运行容器到后台 -e, –env 设置环境变量 -p, –pub ...

  6. Docker: docker image常用命令实战

    #docker列出镜像[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 881bd08c0b08 ...

  7. 这20个Docker Command,有几个是你会的?

    在这之前呢,也写过两篇关于Docker基础入门类的文章 Docker容器技术入门(一) Docker容器技术入门(二) 很多人都感觉这文章这么简单.这么基础,可是别忘记了"万丈高楼平地起&q ...

  8. Docker记录-Docker部署记录

    1.Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  9. docker 系列 - 基础镜像环境和Docker常用命令整理

    =======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...

随机推荐

  1. 硬件设计原理图Checklist 参考案例二 【转载】

    类别 描述 检视规则 原理图需要进行检视,提交集体检视是需要完成自检,确保没有低级问题. 检视规则 原理图要和公司团队和可以邀请的专家一起进行检视. 检视规则 第一次原理图发出进行集体检视后所有的修改 ...

  2. Teamproject --人员职责

    职责分配: 初步分工如下: PM:林豪森 Dev:宋天舒 张迎春 黄漠源 刘翔宇 叶露婷 旦增晋美 黄敬博 Test:林豪森 宋天舒 张迎春 刘翔宇 经过团队的讨论,认为对于职责的分配,并不存在绝对的 ...

  3. [BUAA_SE_2017]结对项目-数独程序扩展

    结对项目-数独程序扩展 Runnable on x64 Only sudoku17.txt 须放置在可执行文件同目录中,可移步以下链接进行下载 Core-Github项目地址 GUI-Github项目 ...

  4. 20172321 2017-2018-2《Java程序设计》第三周学习总结

    20172321 2017-2018-2<Java程序设计>第三周学习总结 教材学习内容总结 第三章要点: 要点1 :String类.Random类.Math类和枚举型,这几个是很有用的并 ...

  5. sampleFactory(女娲造人)

    使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象. package c ...

  6. WebService有什么用?

    入门之前先简单介绍下WCF.在用WebService做开发时,很多人都不知道WCF和WebService之间的关系.实际上WCF包含了WebService,这是一个很强悍的通信技术应用框架.微软把.N ...

  7. beat冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  8. Backlog和冲刺结果以及产品Demo市场调研

    Backlog和第一阶段冲刺结果以及产品Demo 博客停更了一段时间,但是我们团队没有闲着,现在一次性汇报团队工作进度,Backlog和第一阶段冲刺结果以及产品Demo. 在一段时间的分工合作以及调整 ...

  9. Centos7 Zookeeper 集群安装

    1:安装java 环境 -openjdk* 2:zookeeper 安装 (官网 http://www.apache.org/dyn/closer.cgi/zookeeper/) 2.1 目录创建 自 ...

  10. Internet History, Technology and Security (Week 8)

    Week 8 Security: Encrypting and Signing This week we start two weeks of Internet Security. It is a l ...