搭建企业级Docker基础设施,要考虑哪些问题?

Ian Miell大学在牛津大学学习现代历史专业,后进入伯贝克学院拿到了计算机科学的硕士学位。Ian是Docker的早期实践者之一,从三年前就开始鼓捣Docker了,2015年还写了《Docker In Practice》一书。

201607151746532

(看我充满智慧的眼神)

Ian之前在一家叫OpenBet的游戏公司,公司技术环境相对宽松,在Docker上走了很多野路子,比如:自己搭了Registry,在开发服务器上安装Docker和Jenkins插件,把Docker容器应用到了CI流程中,甚至为了免受Dockerfile的限制自己写构建工具。后来Ian去了英国巴克莱银行,各种制度都非常严格,在那里他很长时间都在研究企业级Docker平台解决方案。

这样一个在互联网公司“百无禁忌”过,又在大企业经过了严格流程规范的Docker大牛,在他眼中企业在考虑搭建Docker基础设施时,重点应该考虑哪些问题呢?Ian以提问的方式带你一步步深入思考。本文的关注点在基础设施建设。

Docker镜像

1、Registry

Registry是必不可少的,Docker有一个开源版本的Registry,如果你想要花钱买一个商业版本,也有很多选择。

  • 这个Registry和你的身份认证系统能很好地配合吗?
  • 有没有推广镜像的机制?
  • 有没有角色访问控制?
  • 能不能和其它镜像市场资源互通?
2、Docker镜像扫描
这一点很重要!当镜像被上传到Registry中,如果Registry能自动检测它是否符合标准,是再好不过的。比如可以很快查出这些问题:
  • Dockerfile中有没有会造成安全漏洞的bash(shellshock)?
  • 有没有过期的ssl库?
  • 基础镜像是否安全?
3、Docker镜像构建

Docker镜像是如何被构建的?那种构建方式是贵公司需要的?Dockerfile是标准的,但是一些用户可能想用S2I,Docker+Chef/Puppet/Ansible工具,甚至手工处理它们。

  • 你想要使用哪种CM工具?
  • 你能在选择的配置管理中重用标准的管理流程吗?
  • 任何人都能构建镜像吗?
4、Docker镜像完整性

要保证运行在你系统中的镜像,从构建到运行的整个过程中都没有被篡改。

  • 有没有安全密钥的方式进行镜像签名?
  • 有没有可以重用的密钥仓库?
  • 这个密钥仓库是否可以集成你选择的产品?
5、第三方镜像

供应商未来会通过Docker镜像交付产品。

  • 对于供应商技术的采用,是否有一个管理流程?
  • 是否能做成Docker镜像被重用?
  • 是否要搭建特定的环境(比如DMZs)去运行它们?
  • Docker在这些环境中是否可用?
6、SDLC(软件开发流程)

如果你已经有了软件开发流程(SDLC),Docker如何去适应这个流程?

  • 如何处理补丁?
  • 如何确定哪个镜像需要更新?
  • 如何更新它们?
  • 如何告知团队去更新?
  • 如果镜像没有及时更新,如何去强制更新?
7、加密

像数据库密码这种信息总是要以某种方式被发送到容器中,可以在构建的时候(可能不是个好主意)或运行的时候被发送过去。

  • 容器内如何管理需要保密的信息?
  • 这种信息的使用方式能否被审计/跟踪?是否真的安全?
8、基础镜像

如果你在企业内运行Docker,你可能会希望公司内部使用统一的基础镜像。

  • 这个基础镜像中应该有什么?
  • 应该默认安装了哪些标准的工具?
  • 谁负责这个镜像的管理和更新?

安全和审计

1、Root问题

默认情况下,进入Docker命令意味着你可以操作整个机器,对于大多数安全团队来说,这在生产环境中是不能接受的。

  • 都有谁可以跑Docker的命令?
  • 对于可以执行Docker命令的用户都有哪些限制?
  • 对于容器内运行的服务有哪些限制?

解决方案是有的,但相对都较新。

2、监控

一个规范的企业希望时刻都能确定在基础设施上运行的服务。

  • 如何检测在运行着什么服务?
  • 这些内容能匹配上你的Registry吗?
  • 正在运行的服务是最新的吗?
  • 有没有容器在运行起来后改变了关键文件?
3、取证

出现问题的时候,人们都会想找出原因。以前的物理机和VM中,设有很多保障措施帮助事件后的调查,而Docker则是没有“黑匣子”的世界。

  • 知道这个容器是谁启动的吗?
  • 知道谁构建了这个容器吗?
  • 你能确定一个容器停止后会做什么吗?
  • 你能确定一个容器在停止前做了什么吗?

运维

1、日志

应用日志很可能是关键的管理或控制方式。

  • 容器内运维需要的东西是否都记录下来了?
  • 它们是否遵循了日志的标准?
  • 日志存在哪里?
2、操作系统

企业级操作系统可能大多数已经落后于最新和最好的操作系统了。

  • 你的操作系统是否支持所有的最新特性?比如,一些编排工具和Docker需要的内核版本和包,比你的操作系统要新。
  • 在你本地的包管理工具中,哪个版本的Docker可用?
3、编排

容器集群能被很快地扩展,这也是容器编排发挥作用的时候,你想要使用吗?

  • 你选择的编排工具是否能和你的Docker基础设施很好地配合?
  • 你是要跟随主流,押宝在一个编排工具上,还是等到不得不做决定?
 

 

开发

1、开发环境
  • 开发者都喜欢admin,你准备好给通过Docker给他们admin权限了吗?
  • 他们的客户端会和部署环境一致吗?如果他们正在用docker-compose,可能不会希望在生产环境中用到pod(Kubernetes的部署调度单元)。
2、CI/CD

Jenkins是最受欢迎的CI工具,但对于企业来说也有其它的选择。

  • 对于CI/CD插件你的政策是什么?
  • 是否准备好了马上转换到新的插件?
  • 你的CI流程是为了迎合暂时的Jenkins实例,还是永久的,亦或是两者兼顾?

基础设施

1、共享存储

Docker容器的持久化数据存在volume中,而volume的使用独立于运行的容器。

  • 容易提供共享存储吗?
  • 共享存储能应对需求的增长吗?
  • 共享存储有跨部署区域可用的需求吗?
2、网络

企业通常都有更偏爱的SDN解决方案,比如Nuage,Calico等。

  • 有没有规定的SDN解决方案?
  • 容器会影响你选定的SDN解决方案吗?
  • 容器和SDN的交互会制造不可忽略的开销吗?
3、云服务商

如果你在使用AWS或Google家的云服务:

  • 你计划如何交付镜像?如何在云上运行容器?
  • 你想要将自己绑定到他们的Docker解决方案,还是选择一种更通用的方式?
4、aPaaS

通过提供容器运行的环境支持,类似OpenShift或Tutum Cloud的aPaaS解决方案能解决以上的大部分问题。

  • 考虑过用aPaaS解决方案吗?
  • 哪种方案解决了你的大部分问题?
 
分享到:更多 ()