容器集群结构危机亟待破局

  • 张天雷

2014 年 10 月 16 日

话题:语言 & 开发架构

所谓容器集群结构是一种虚拟化技术,由 Docker/Container 实践定义。Docker 容器集群是一个开源项目,是专为开发者和系统管理员设计,用来发布和运行分布式应用程序的一个开放性平台,其特点就在于可以自动化的将应用变得容易移植和部署。容器即 Container,是一种轻量虚拟化技术,运行有单实例、精简化 Linux 以及在其上运用统一资源策略的独立应用程序,Docker 则在容器上提供应用程序分发。问世以来,虽然 Docker 团队一度声称其版本仍然是“不可用于产品级开发”,但是仍然在业界造成非常大的技术变革,截止目前可以用于产品的 1.0 版本发布,下载量已超百万。

即便从易用性上的到了业界的一致认可,Docker 的安全性却令用户颇为担心,不完善的用户命名空间等技术,使得大规模部署容器集群存在一定的安全隐患。微软公司正致力于容器集群结构的虚拟化技术,将其产品与 Docker 相连、参与 Google 的 Kubernetes 计划,并推出自己的 Drawbridge。但是这家云计算巨头显然也有自己的顾虑,进而转向自行设计容器集群结构。微软首席技术官 Mark Russinovich 表示,这种顾虑主要来自于现有结构的安全性风险。虽然意识到容器集群结构是 PaaS 的未来,但他也敏锐的意识到这种结构的安全性短板。

今年六月的 DockerCon 大会上,微软就展示了部署在 Azure 的 Linux 虚拟机上的容器集群示例。展示中,微软将创建和管理 Docker 宿主机的步骤进行了很大的简化,形成了工作流。具体来讲,通过升级 Azure 的跨平台命令行接口以及使用虚拟机扩展技术,微软将快速在 Azure 云中创建管理和使用 Docker 容器技术变得触手可得,而且这种升级并不会影响到 Docker 本身提供的标准化客户端的使用。这么一来,Azure 云的用户就无需频繁登录每个 Docker 镜像来对其进行必要的控制,而是通过台式机甚至笔记本就可以轻松管理集群。随后,微软表示要为 Google 的 Kubernetes 容器集群管理器贡献代码。微软从大部分开发者的需求中看到,对 Auzre 上运行 Linux 的需求已经带来 Linux 容器集群的需求,并成为推动 Linux 容器集群技术的主要动力。微软已经与 RedHat 实现互联,并预留其他 Linux 发行版的互联能力,使得现在 Azure 上已经能够与 CentOS、openSUSE 和 Ubuntu 等发行版连接,但是该公司并为表示为此提供正式的技术支持。在微软开源技术的网站上,Ross Gardler 发布了文章阐述 Azure 和 Kubernetes Visualizer 上运行 Docker 的情况,给出系统架构图如下:

此外,在微软广为传播的 ASP.NET 框架的下一个版本中,和可能会带有 Docker .Net 开发接口,使得 ASP 开发者能够在 Docker 中更流畅的运行应用。

另一方面,微软已经开始内部使用微软研究院研发的Drawbridge项目提供的容器集群了。微软已经认定,对于 PaaS 和普适计算等高密度、高负载计算环境来说,容器集群从技术验证平台转化为生产力环境已经是大势所趋。但是现在容器提供的可移植性,显然使其功能比安全更显眼,现在的容器并不安全。虚拟机与宿主之间共享数据过多又不能有效隔离,影响了容器安全性,至少在云计算容器用户间还达不到安全性要求。容器的价值在于,实验环境中的程序在测试中可以与服务器的软件等其他部分隔离,所以可以以相同的方式部署到其他相同环境中不会影响这些环境。

据微软公司介绍,Drawbridge 由两部分构成,分别是一个安全隔离容器 picoprocess 和一个运行于安全容器之内的系统 Library OS,可以参考下图:

微软准备在 Windows 上公布 Docker 与 Drawbridge 容器集群,两者领域不同但同等重要。Docker 是在 Linux 技术之上的,而 Drawbridge 则基于 Windows 容器集群技术,不开源但安全性更高。Drawbridge 支持所谓“不相容工作负载”,比如在虚拟机中可以在微软机器学习服务下安全地运行客户的机器学习算法。但是显然这种技术不能在开源的容器集群项目中使用,机器学习服务也不行。

资源隔离也是 Drawbridge 容器集群的主要优势,所谓资源隔离指运行中既不被其他程序也不被其设置影响。通过资源隔离,用户可以以虚拟机作为安全边界,作为轻量容器整体打包并大量使用。这样一台虚拟机中可以运行几百个容器,非活动容器就释放资源给活动容器使用。资源隔离给予容器最基本的服务,是 Drawbridge 比 Docker 具有的重要属性。

更多关于 Drawbridge 细节可以参考微软 MSDN 网站给出的幻灯片


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

语言 & 开发架构