让容器更安全、更有用
Docker容器已经成为开发者工具箱中非常重要的工具,这项技术的被接受程度也已经非常高了。到今天为止,Docker已经有超过了20亿次的下载,这对于2015年4月的3亿次的下载来讲是一次飞速的发展。有些组织刚刚开始使用这项技术,而有的公司则已经深入研究了一段时间,他们都成为这迅速增长的部署的来源。
容器使得你可以从更小的结构单元开始构建复杂的应用, 每个结构单元执行一个单独的功能。这种架构也被称之为微服务,非常适合持续部署系统,当某个微服务的组件被在线升级时不会影响到其它服务的运行。
但是这种迅速成长的浪潮让很多企业安全专家担忧,来自Red Hat的Dan Walsh曾经写过一些非常好的文章来解释为什么容器无法包容。虽然容器提供了系统资源的隔离例如内存和CPU,但是运行在同一个主机上的所有容器共享一个操作系统,某个容器的安全问题很有可能被通过共享的内核而影响其它的容器。
虽然这些担忧是合理的,但是还是可控的。让我们来看一下如何利用Docker容器的内在结构来防护容器化的应用。
Docker——隔离状态的能力
Docker容器是从静态的镜像构建的,镜像由不同的层次构成。这些层次可以被不同的镜像复用。例如,Ubuntu的基础层可以出现NGNIX容器中,也会出现在Mongo DB的容器中。当一个容器镜像被实例化之后,就成为了一个容器。在一个Docker容器中,这些层次组成了一个统一的容器文件系统。每一层被实例化为只读,在其上会有一个可读写的层次来记录容器运行过程中对文件系统进行的修改。
当一个容器退出时,如果用户没有执行“docker commit”,则读写层将会消失,没有任何的状态变化被记录,镜像将保持不变。如果用户执行了“docker commit”,这个读写层将会被加到原有的镜像上并生成一个新的镜像(译者注:原有镜像保持不变)。利用这种方法,每个 “docker –commit” 以一种可控的增量方式记录了连续的变化和容器状态的变化。你不但可以容易的回退到一个先前的状态,这对可追溯性、可管理性和鉴证也是非常有用的。
这种显式的将状态变化限制在读写层是对安全性非常有用的功能。首先,这保证了大部分代码在只读模式下运行,这意味着运行过程中的任何不良情况都无法持久,除非你显式的commit这些变化。其次,这给了你一个机会去专注对读写层的监控。
但是,无状态容器的一个最重要的作用是用户可以更容易的获得容器的基线行为模型,如果观测到的运行时行为跟基线不同,你就知道这里面存有潜在的问题。
这解决了风险和异常检测中最大的问题,就是开发一个有用的基线来标识“正常”。你一旦有了这样一个基线并可以正确检测异常时,你就可以使你的容器能够控制和抵御潜在的攻击。
在生产中使用容器
Docker容器提供的能力可以以只读方式运行大部分应用,并可以将状态变化隔离到某个可管理的模块中。这带来了在安全方面进行创新的机会,但这要求你深入的研究和利用容器架构的内在特性。一个数字媒体公司这样做了,这个公司在云中运行了大量的服务提供给消费者和商业用户。开发团队一年前开始使用Docker,现在这个公司已经在Docker里运行了大部分的服务。
安全团队对所有的容器镜像进行了安全检查,成功的去掉了构建不佳和违法公司政策的镜像。接下来,他们制定了一个规则,容器需要以只读方式运行。只有个别特例的应用可以commit运行时变化,而这些应用会被认真的记录和追溯。
这个公司正处在将其应用改造成微服务和容器的征途上,他们的目前经验,除了这是一个更加有效的应用架构外,安全团队也说服了他们,这种新的架构使他们为未来更多的变化做好准备,问题能够更容易的被检测和处理。
原文链接:Make Containers Contain and Work for You (翻译:李光成)
========================================================
译者介绍
李光成,IBM中国研究院资深研究员,研究方向是云计算基础设施及技术。目前在做的是容器云方面的研究项目。
原文发布时间为:2016-10-14
本文作者:李光成
本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:让容器更安全、更有用

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
容器存储架构比较:Kubernetes、Docker和Mesos Compare
本文讲的是容器存储架构比较:Kubernetes、Docker和Mesos Compare【编者的话】 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死。但是对于数据库、日志文件等可以实时变化的数据,我们不能够通过这种方法存取。结合场景这次主要谈下Docker的存储方式,以及主要存储方式的对比。 【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。 “There is no such thing as a stateless architecture” —— Jonas Boner 任何应用程序都需要数据支撑,这也是我们商业存在基石。最初,容器应运而生的主要目的之一也是为了解决无状态服务。但短...
- 下一篇
CoreOS发起的友好兼容Kubernetes的存储系统:Torus
本文讲的是CoreOS发起的友好兼容Kubernetes的存储系统:Torus【编者的话】容器和微服务管理一直有一个最棘手的问题就是持久化存储,CoreOS最近发起了一个项目Torus,给Kubernetes用户提供了一个友好兼容的分布式存储集群,也欢迎大家积极参与这个开源项目。 为了在容器编排领域内继续快速创新, CoreOS 发起了一个开源项目,旨在给Kubernetes用户提供一个合适的存储系统来配合Pods工作。 Torus 背后的目标是为由Kubernetes编排的容器集群提供可伸缩的存储。 “我们从Kubernetes用户那儿听到使用现有的存储系统是很困难的。我们很容易运行Torus,它运行在一个容器中,并且可以用Kubernetes进行部署。它提供了一个分布式存储集群来管理微服务的工作负载”,CoreOS产品负责人 Wei Dang 在一次和TNS的采访中这么说。 按照CoreOS软件工程师 Barak Michener 的一篇博客文章 《introducing the new technology》 所说的,Torus解决了容器和微服务管理中最棘手的一个问题,也就是使用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池