6 月 25 日,我代表 Linux 中国社群团队参加了本次 KubeCon 2019(上海)峰会,期间有幸和安全容器 runV 的创始人王旭做了一番长谈,就云原生技术、安全容器、开源与初创企业等话题进行了深入沟通。现将这些话题整理其精要分享给大家。
互联网技术发展速度之快是所有从业者甚至非从业者都能感受到的。尤记得在世纪之交时,那时候互联网刚刚在中国开始向民用普及,不说支撑大规模的网站访问量的相关技术,就连 Linux、负载均衡甚至都没有被普遍使用。而在二十年之后,云端计算已经大行其道,当今的技术人员已经言必称虚拟化、容器和 Serverless,就连刚刚准备入行互联网运维行业的新人们都已经从最初觉得考个 Linux 认证就够了到开始问询 Kubernetes 培训哪家强了。
从一届届 LC3、DockerCon 到 KubeCon,蓬勃发展的云端计算与容器化似乎已经称霸了互联网领域。这次我带队参加了 6 月 24 ~ 26 日的 KubeCon 大会,对此感受尤为深刻。事实上,这次在上海举办的 KubeCon 2019 距离上次在同一地点举办的同一会议才仅仅过去半年,但是我们依旧在这次大会上看到了层出不穷的大量新技术、新动态。
云与容器的结合,引爆了这一切。
作为容器领域的资深专家,让我们来看看王旭是如何看待容器和云原生领域当前的发展态势的,以及作为这个领域的一家初创技术企业的创始人,他是如何投身到这个领域的,开源又在其间起到了什么作用。
王旭,安全容器专案 runV 的创始人,现已加入蚂蚁金服。
创立于 2015 年的 runV 专案已于 2017 年和另外一个来自英特尔的 Clear 容器专案合并为 Kata 容器专案,并由 OpenStack 基金会(OSF)进行管理,它与来自Google的 gVisor 专案并称为目前两大安全容器技术。
开源与初创
要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。临近 2015 年,Docker 逐渐被业界主流所接受,互联网技术已经有一个比较明显的发展趋势:第一是云,第二是容器。而云加上容器一定会产生隔离性的需求,这应该说是王旭和他的联合创始人赵鹏做安全容器最早的一个思路:要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。这就是 runV 这个专案想法的起源。
runV 释出的同一个星期,英特尔Clear 容器也释出了。2016 年 8 月份,在西雅图的 LinuxCon 上,王旭和 Clear 团队见面交流,双方在一些细节上面展开合作。在 2017 年 9 月份一个会议上,英特尔软件副总裁、开源技术中心总经理 Imad Sousou 提出专案合并,然后放到基金会里管理。当时大家都觉得这是很好的一个思路。
对于 runV 和 Clear 来说,避免了重复开发以及花费精力在如何说明两者的不同上,同时合并之后可以共同推动发展一个社群,一起去寻找更多的使用者。同时,两者合并还有更多的意义。
Kata 容器的意义
Kata 容器最大的意义在于推动了社群的发展。王旭认为,Kata 容器最大的意义在于推动了社群的发展。在 2018 年之前刚开始做 Kata 容器的时候,王旭他们需要很多的附加程序来模拟 runC 容器的行为,因为 runC 是事实标准,你需要相容它。但是当 Kata 和Google的 gVisor 都出来之后,上游社群就注意到这一点,开始重视,于是推出新的界面,可以语义明确地直接去对话,而不需要再去模拟 runC 的底层行为,把原来的 2N+2 个辅助程序变成了一个程序。另外,既然有了不同的容器执行时,是不是可以在不同的场景下让它们转到不同容器执行时环境上去?于是就有了“ 执行时类(runtime class)”这样的结构。Kubernetes 社群做了很多这样改进,它们也在逐步变成事实标准。这样,一个小专案的引入推动了包括从使用者到上下游的整个社群相关软件的变动。
安全容器也让更多的业务使用容器变得可能。
同时,安全容器也让更多的业务使用容器变得可能。王旭在蚂蚁金服做面向金融的一些服务往云原生方向发展,需要非常严格的安全标准,这正好和 Kata 这些安全容器专案结合在一起。
增强安全性不可避免的会带来一些会效能或易用性的取舍。王旭他们的做法是,在 Kata 里面增加了一个隔离层,减少使用者需要考虑的事情。举个 Docker 的例子,Docker 映象的开发者和管理员往往不是同一个人,对于管理员来说给出的许可权越少越安全,但是对于开发者来说的话,尤其开发和除错的过程中,许可权的变少会让开发和除错变得非常困难。对于开发者来说,不能完全理解管理员要做的事情,所以你就会见到很多的 Docker 映象都是要所有许可权的,因为它自己也不知道需要什么许可权;此外还有一些动态的情况,很难先验地用程式去完全断定它需要的许可权,开发者并不太不确定到底使用了哪些能力。在这个情况下我们做的事情就是把能力整体限制到沙盒里面。在沙盒里面是完整的能力,但是实际上沙盒本身访问不到外层的系统能力,这样对应用是无感知的,操作系统就变得更安全了。确实,对于系统来说安全性和便利性是一对矛盾,你很难在同一个层面上把这个问题完全解决掉。
现在有了“执行时类”,可以指定是否需要使用安全容器。Kubernetes 社群给大家提供 了一个机制,使用者可以选用或者不用安全容器,它可以是全域性的配置,也可以是 pod 级别的配置。对安全性不太关键的,比如说访问一些不太敏感资讯的,可以在安全性上折中一点,可以让效能更好一些。
容器的发展
从早期的 Cgroup 开始,到 LXD/LXC 这样的容器技术的出现,再到 Docker 的的诞生,一下子点燃了整个容器技术生态,紧接着在容器编排系统出现后,并发展到现今 Kubernetes 成为了事实标准。容器领域一直在快速发展。王旭的看法又是怎样的呢?容器领域正在逐渐往上层发展。
他认为,容器领域正在逐渐往上层发展。互联网技术本身一开始是在架构层面、在底层发展,但是从 Docker 开始兴起时,给大家的感受就是减少了对底层环境的考虑,用完整的环境把应用包装起来变成容器,让它可以随地随地执行。不需要操心执行在什么样的操作系统里,把操作系统这一层干掉,或者说把它变成很窄的一层。
以发行版为例。Linux服务器发行版的核心工作有两件:一是怎么把这个系统安装上;另一个是怎么去尽量平滑管理和升级软件系统。所有的事情其实都是在围绕这两件事情。最初出现了 RPM、APT 这些包管理系统,后来是通过 Chef、Puppet、Ansible 这类配置管理系统自动化的大规模部署,再到现在的 Docker、Kubernetes,一它们都是在做软件管理的事情。原来是操作系统在做这件事情,现在是 Kubernetes 在充当操作系统的位置;对云服务来说的话,这就是无服务器模式。2014 年 AWS 在拉斯维加斯的 re:Invent 大会发布 Lambda 的时候,得到业界非常大的关注。从 Lambda 开始,每个云厂商都逐渐有了自己的无服务器服务。所以他觉得未来的发展方向,应该是向这个方向的。
除此之外,像现在中介软件、服务网格也都是这样一个目的,尽量的把应用要做的事情剥离出来,和应用无关的事情全都抽象出来放到底层。
对应用开发者和使用者来说,可以不用关心底层是什么架构、怎么伸缩的,只需要知道到我需要什么服务,只要定义应用,定义 Kubernetes 配置,由它统一管理、自动伸缩和排程就好。基础设施这一层会越来越向一些少数的云厂商集中,而大家更多的精力是帮助开发者做事情,集中精力在那些业务、智慧等逻辑部分。
金融与云原生
加入蚂蚁金服之后,王旭致力于将安全容器技术落地到金融级云原生的场景下。由于金融领域的特殊性,云原生实践也需要有相应的变化。要保证安全性,不仅仅满足应用的,也要满足监管的端到端的安全性要求。
王旭举例说,金融行业不仅仅本身对安全有要求,监管对安全也有要求。所以必须要保证安全性,不仅仅满足应用的,也要满足监管的端到端的安全性要求。另一方面,他们认为安全性包括两方面,一个是应用不能破坏沙盒,泄露到外面,同时应用的底层供应商不是自己时,也可以安全的使用。这就是一个双向的安全问题。
一般而言,作为一个云服务商,会假设所有的使用者都是坏人,因为所有的使用者都可能去窥探基础设施,它们都可能攻击其他使用者,攻击宿主机,所以要做隔离。
而金融级的要求是不光是要做这一层的隔离,而是要做更强的隔离。首先是对应用不能盲目信任,即便是内部应用也不能放任,因为内部的也有可能存在区域性的破坏,也有可能会有不安全的程式码或者没有被完全验证的测试程式码,还有可能会有第三方的程式码。反过来,应用既然是金融级的应用,它对环境也有安全要求,所以这是整体的要求。
技术创业与开源
开源对软件公司来说,是一件向死而生的事情。在早期以开源技术为核心做创业公司时,王旭认为开源是市场推广的一个很好途径。因为软件是有人买才能赚钱,有人用才有人买,所以你如果不开源,就要一家一家地找人去试用,但是你开源了之后大家就可以免费尝试。不过,开源并不是没有缺点,开源对软件公司来说,是一件向死而生的事情。你把最核心的技术开源了,赌的是别人跟不上你的发展速度;或者说别人相信你才有能力把它做到更好,别人才会用你;或者说你给别人看到的当前版本,让他相信下一个版本他也做不到你这么好,所以才愿意跟着你来走,以至于当他维护不了的时候才会愿意来给你掏钱。这应该说是一个在市场背景下的选择。
反过来说,如果说你现在做了一个基础设施领域的软件特别好用,但是你不开源,这个时候就一定会有人做一个一样的开源替代品。那你就看能不能比它做得好,你能不能拿更多的支援、拿到更多资源。这是很困难的。
所以在这个情况下,你不得不去做这种这种极致的推广手段,就是这种不买先送的这种开源式的市场推广手段。目前来看,纯软件实现的、跟硬件没关系这种专案基本上都是采用了开源或者半开源的方式,就是说至少给你一个开源的演示版或基础版。这种方式,从商业上说是迫不得已的一种推广方式。如果你不做,你的使用者们用不到的话,他们会去寻找替代品,也一定会有开源替代品出现。
技术创业还会面临一个挑战,就是当你做出来产品以后,很快会有更大的对手入场,对于初创公司来说,面临的压力是颇大的。王旭面临的情况稍微有些不同。
幸运的是,推出和 runV 类似专案的公司是英特尔,在这件事情上并没有很强的盈利导向,这也是双方最终能够合作的前提。王旭认为尽量避免无用的竞争,而是一起来教育和开拓市场,是更有建设性的做法。
做初创公司,做有价值的东西是最重要的。
经历了开源技术为核心的技术创业之后,王旭对如何做技术创业也有一些自己的看法。他认为,对于初创公司来说,很大程度上来说都在赌别人没有做过的事情,因为你重复别人做的事情,还要比别人做的好,是一件很困难的事情。对于专案来说,取决于你想的是什么东西,你的专案想得越多,想出来和别人有什么不同,别人怎么需要你的专案,其实它就越有价值。
做初创公司,做有价值的东西是最重要的,而不是说做一个很好看的架构,最重要的还是要有价值,大家才会用。此外,还要考虑相关的专案,就是你要和谁一起配合工作,你的使用者群是谁,你的使用者需要去引用的已有专案是哪些,怎么和它们共存,因为完全从零开始造轮子不太可能,你会用到很多已有的成果。
新做一个专案,要考虑很多相关的东西、上下游的东西,各种的相容性、支援性,要在生态里面去找到你自己的位置。除此之外,还要明白什么是专案最重要的指标,比如开始做 runV 的时候,第一个考虑事情就是安全容器的启动时间,并且不间断的去关注和优化。
最后,做开源专案也并不是说把程式码开源出来就行了,还要注重社群的建设。
作为一个开源专案来说,它的社群是非常重要的,有社群才是开源专案。
王旭认为,作为一个开源专案来说,它的社群是非常重要的,有社群才是开源专案,没有社群的专案只是拿出程式码给大家看看而已,那样不会有人真的严肃的去使用你的程式码。
无论是在 runV 的时期,还是后面 Kata 容器的时期,社群都是王旭和团队非常注重的一环,有很多在早期关注和参与的开发者和组织,到现在王旭也和他们保持着很好的关系。
结语
作为国内少数的基础设施方面的开源软件初创专案的领军人物之一,王旭无疑在这个领域的技术和商业方面拥有独到的经验和感悟,这些思考可以给更多在前沿领域的技术人员和开源初创专案一些启示。“穿山甲专访”栏目是 Linux 中国社群推出的面向开源界、互联网技术圈的重要领军人物的系列采访,将为大家介绍中国开源领域中一些积极推动开源,谙熟开源思想的技术人,并辨析其思考、挖掘其动因,揭示其背后所发生的事情,为关注开源、有志于开源的企业和技术人标出一条路径。
取名为“穿山甲”寓意有二:取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用;穿山甲是珍稀保护动物,宣传公益。