![201607151746532](http://www.dockerinfo.net/wp-content/uploads/2016/07/201607151746532.jpg)
(看我充满智慧的眼神)
Ian之前在一家叫OpenBet的游戏公司,公司技术环境相对宽松,在Docker上走了很多野路子,比如:自己搭了Registry,在开发服务器上安装Docker和Jenkins插件,把Docker容器应用到了CI流程中,甚至为了免受Dockerfile的限制自己写构建工具。后来Ian去了英国巴克莱银行,各种制度都非常严格,在那里他很长时间都在研究企业级Docker平台解决方案。
这样一个在互联网公司“百无禁忌”过,又在大企业经过了严格流程规范的Docker大牛,在他眼中企业在考虑搭建Docker基础设施时,重点应该考虑哪些问题呢?Ian以提问的方式带你一步步深入思考。本文的关注点在基础设施建设。
Docker镜像
Registry是必不可少的,Docker有一个开源版本的Registry,如果你想要花钱买一个商业版本,也有很多选择。
- 这个Registry和你的身份认证系统能很好地配合吗?
- 有没有推广镜像的机制?
- 有没有角色访问控制?
- 能不能和其它镜像市场资源互通?
- Dockerfile中有没有会造成安全漏洞的bash(shellshock)?
- 有没有过期的ssl库?
- 基础镜像是否安全?
Docker镜像是如何被构建的?那种构建方式是贵公司需要的?Dockerfile是标准的,但是一些用户可能想用S2I,Docker+Chef/Puppet/Ansible工具,甚至手工处理它们。
- 你想要使用哪种CM工具?
- 你能在选择的配置管理中重用标准的管理流程吗?
- 任何人都能构建镜像吗?
要保证运行在你系统中的镜像,从构建到运行的整个过程中都没有被篡改。
- 有没有安全密钥的方式进行镜像签名?
- 有没有可以重用的密钥仓库?
- 这个密钥仓库是否可以集成你选择的产品?
供应商未来会通过Docker镜像交付产品。
如果你已经有了软件开发流程(SDLC),Docker如何去适应这个流程?
- 如何处理补丁?
- 如何确定哪个镜像需要更新?
- 如何更新它们?
- 如何告知团队去更新?
- 如果镜像没有及时更新,如何去强制更新?
像数据库密码这种信息总是要以某种方式被发送到容器中,可以在构建的时候(可能不是个好主意)或运行的时候被发送过去。
- 容器内如何管理需要保密的信息?
- 这种信息的使用方式能否被审计/跟踪?是否真的安全?
如果你在企业内运行Docker,你可能会希望公司内部使用统一的基础镜像。
- 这个基础镜像中应该有什么?
- 应该默认安装了哪些标准的工具?
- 谁负责这个镜像的管理和更新?
安全和审计
默认情况下,进入Docker命令意味着你可以操作整个机器,对于大多数安全团队来说,这在生产环境中是不能接受的。
- 都有谁可以跑Docker的命令?
- 对于可以执行Docker命令的用户都有哪些限制?
- 对于容器内运行的服务有哪些限制?
解决方案是有的,但相对都较新。
一个规范的企业希望时刻都能确定在基础设施上运行的服务。
- 如何检测在运行着什么服务?
- 这些内容能匹配上你的Registry吗?
- 正在运行的服务是最新的吗?
- 有没有容器在运行起来后改变了关键文件?
出现问题的时候,人们都会想找出原因。以前的物理机和VM中,设有很多保障措施帮助事件后的调查,而Docker则是没有“黑匣子”的世界。
- 知道这个容器是谁启动的吗?
- 知道谁构建了这个容器吗?
- 你能确定一个容器停止后会做什么吗?
- 你能确定一个容器在停止前做了什么吗?
运维
应用日志很可能是关键的管理或控制方式。
- 容器内运维需要的东西是否都记录下来了?
- 它们是否遵循了日志的标准?
- 日志存在哪里?
企业级操作系统可能大多数已经落后于最新和最好的操作系统了。
- 你的操作系统是否支持所有的最新特性?比如,一些编排工具和Docker需要的内核版本和包,比你的操作系统要新。
- 在你本地的包管理工具中,哪个版本的Docker可用?
容器集群能被很快地扩展,这也是容器编排发挥作用的时候,你想要使用吗?
- 你选择的编排工具是否能和你的Docker基础设施很好地配合?
- 你是要跟随主流,押宝在一个编排工具上,还是等到不得不做决定?
开发
- 开发者都喜欢admin,你准备好给通过Docker给他们admin权限了吗?
- 他们的客户端会和部署环境一致吗?如果他们正在用docker-compose,可能不会希望在生产环境中用到pod(Kubernetes的部署调度单元)。
Jenkins是最受欢迎的CI工具,但对于企业来说也有其它的选择。
- 对于CI/CD插件你的政策是什么?
- 是否准备好了马上转换到新的插件?
- 你的CI流程是为了迎合暂时的Jenkins实例,还是永久的,亦或是两者兼顾?
基础设施
Docker容器的持久化数据存在volume中,而volume的使用独立于运行的容器。
- 容易提供共享存储吗?
- 共享存储能应对需求的增长吗?
- 共享存储有跨部署区域可用的需求吗?
企业通常都有更偏爱的SDN解决方案,比如Nuage,Calico等。
- 有没有规定的SDN解决方案?
- 容器会影响你选定的SDN解决方案吗?
- 容器和SDN的交互会制造不可忽略的开销吗?
如果你在使用AWS或Google家的云服务:
- 你计划如何交付镜像?如何在云上运行容器?
- 你想要将自己绑定到他们的Docker解决方案,还是选择一种更通用的方式?
通过提供容器运行的环境支持,类似OpenShift或Tutum Cloud的aPaaS解决方案能解决以上的大部分问题。
- 考虑过用aPaaS解决方案吗?
- 哪种方案解决了你的大部分问题?
评论前必须登录!
注册