安全容器:开启云原生沙箱技术的未来

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文中,蚂蚁金服和阿里云的容器开发者们会共同向大家介绍安全容器的前世今生、它们在 双11 中的应用、以及未来的发展方向。

本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书

作者:
王旭,花名循环,蚂蚁金服资深技术专家
刘奖,阿里云基础软件部资深技术专家
秦承刚,花名承刚,蚂蚁金服资深技术专家

前不久,我们的同事艾竞说“安全所带来的信任,是一种无形的产品,支撑着所有金融业务”,我深以为然,作为蚂蚁金服的基础设施部门,我们既要努力推进基础设施云原生化,也要保证全链路的安全,而安全容器,就是整个安全链路中最终“落地”的一环。无独有偶,基础设施云服务,作为云原生应用的发源地,也在和云原生应用的互动中前行,安全容器沙箱作为云服务的演化方向之一也在扮演日益重要的角色。本文中,蚂蚁金服和阿里云的容器开发者们会共同向大家介绍安全容器的前世今生、它们在 双11 中的应用、以及未来的发展方向。

容器与安全容器

如果把一套云原生的系统想成一个有机体,那么,容器无疑就是其中的细胞,它们每个都是个独立的个体,又协同工作,它们生生不息让整个生命体健康运转。每个细胞都有它自己的隔离系统,正如容器,它的名字(Container, Jail, Zone...)天生就带着隔离的味道,但是,容器的安全性究竟够不够呢?年初 Tripwire 的一份调查揭示了人们对容器安全的种种担心【1】:

  • 42% 的受访者因为安全顾虑推迟或限制了容器化进程;
  • 58% 的在生产环境中使用容器的受访者承认它们的容器中存在安全缺陷,另外还有 13% 的人觉得自己的容器有安全问题,但不确定,而非常决绝地表示自己的容器非常安全的比例只有 7%。

面对这样的威胁,目前可用的容器层的解决方案就是 Linus Torvalds 在 2015 年北美 LinuxCon/ContainerCon 上所说的——“安全问题的唯一正解在于允许那些(导致安全问题的)Bug 发生,但通过额外的隔离层来阻挡住它们。” 这也就是当今的安全容器技术的基本原理。(注:Linus 所说的思路是安全容器的思路,但安全容器不是从这里开始的,事实上,主流开源安全容器项目 Kata Containers 【2】的两个前身——runV 和 Clear Containers 都是在 Linus 上述访谈之前三个月开源的)。

隔离性不仅是安全

Kata Containers 在官方网站上展示的格言就是——

The speed of containers, the security of VMs

而且,这类技术最广为接受的名字也是“安全容器”。然而,隔离性所带来的好处远不止安全性这一点,在阿里巴巴和蚂蚁金服的大规模实践中,它至少还意味着四个方面的优势:

  • 分层内核可以改善节点调度效率,容器的进程在自己的内核上被调度,对于主机来说,就只是一个进程,这在节点上运行着大量容器的时候,对节点的调度效率和稳定性都有极大的帮助;
  • 良好的封装可以降低运维的压力,如果可以把应用进程乃至数据全部放入安全容器中,不对主机展示,那么对于主机的运维来说,将变得更加简单;
  • 有利于系统的 QoS 保障计费系统的准确工作,如果所有用户的相关的计算和数据流量都放在一个完全封装的安全容器的中,那么,对于主机管理网的 QoS 保障、对用户的 SLA 保障、对用户的计费都将是可操作且集中的;
  • 有利于保障用户的数据隐私,普通容器的情况下,容器的文件系统数据和进程数据是完全暴露给主机的,对于云服务场景,这就要求用户授权服务方来访问用户数据,否则无异于掩耳盗铃,但如果可以通过安全容器的沙箱把这些都放在容器中,那么对于用户的授权要求也就可以最小化了。

显而易见,云原生基础设施确实是需要更好的隔离技术的,安全容器是大有可为的。

Kata Containers 与阿里云安全沙箱

上面已经提到,目前主流的开源安全容器项目是 Kata Containers,核心是用虚拟化技术来作为容器(确切地说是 Kubernetes Pod)的沙箱,从而提供虚拟机级别的隔离性,这个安全级别是在过去多年以来的云服务中被广泛接受的。该项目在两年前的 2017 年 12 月,由 runV 和 Intel 的 Clear Containers 项目合并而成,本文作者之一王旭就是 runV 项目的发起者,也是 Kata Containers 的创立者之一。

在过去两年中,Kata Containers 在保证了对标准容器镜像的兼容性和对 Kubernetes 生态的兼容性的同时,不断致力于与相关社区一起,降低沙箱技术的开销,提升安全容器技术的弹性。引入/支持/推动了 containerd shim-v2 API【3】,Kubernetes RuntimeClass,Rust-VMM,等来降低开销、减少间接层、改善集成 Kubernetes 效果。

在阿里巴巴和蚂蚁金服内部,基于 Kata Containers 等安全沙箱技术也被应用在内部不同应用等混合部署、阿里云 Serverless 服务等场景,支持着各种业务。

gVisor 与进程级虚拟化

Google 在 2018 年发布了基于进程级虚拟化技术的沙箱产品“gVisor”。gVisor 很轻薄,利用了基本的硬件虚拟化技术提供进程级别的抽象,无需 VMM 支撑。gVisor 的运行就像 Linux 进程一样,拉起速度快,对内存等资源的占用也较小。蚂蚁金服在 gVisor 开源之后不久,就开始投入开发。目前已经是 gVisor 社区中,Google 以外的最大贡献者。同时,蚂蚁针对自己的业务场景进行了大量的定制优化。现在已经成功将其应用于生产环境,进行了初步的生产验证。

gVisor 是安全容器技术,更是全新的操作系统。它实现了一个用 Go 语言写的“安全内核”。这个内核实现了 Linux Kernel 的绝大部分功能。由于 Go 语言在内存安全与类型安全上的优势,gVisor 的“安全内核”被视为一道重要的防御纵深。我们在开发中会 review 每一行代码的“安全性”。为了进一步加强安全,蚂蚁搭建了一套 fuzz 测试系统,一刻不停的测试。为了弥补 Go 语言在性能上的不足,蚂蚁重构了网络协议栈,在获取安全的同时,也大幅提升了性能。

面向云原生,gVisor 的最大优势是“资源可伸缩”。它不会预留 CPU 与内存资源,跟普通的 Linux 进程并无太大差异。在 gVisor 容器中,不用的资源会立刻还给宿主机。我们在尝试基于 gVisor 的进程级虚拟化技术,打破传统容器的资源边界。在 Serverless 等场景下,实现超高密度的容器部署。

未来:从安全容器到云原生沙箱

就目前来看,虽然云原生应用期待沙箱有更好的隔离性,但目前的沙箱技术尚有一些需求没有完全满足,所以,我们在规划 2.0 乃至未来的 Kata 的时候,就将演进方向定为:

  • 在保持沙箱边界清晰的同时,可以跨沙箱共享一部分资源,极致降低开销;
  • 更加按需、弹性、即时地根据应用的需求来提供资源,而不是硬性地切分;
  • 让用户空间工具、沙箱、容器应用的内核联合为应用提供服务,因为应用的服务边界是内核 ABI 而不是模拟的硬件。

可以看到,这也喻示着两类安全容器技术实际上是彼此靠近的,虚拟化容器也与传统虚机渐行渐远,发展成为”云原生虚拟化“。蚂蚁金服和阿里云的正在这些方面共同合作,其中的部分工作已经展开,并在推动社区。

开源:从社区来,到社区去

目前,蚂蚁金服和阿里巴巴的安全容器技术都是基于开源社区而开发的,重要的开源社区包括 Kata Containers, gVisor 和 RustVMM。我们已经将一些成果推向社区,并在持续贡献。并且,秉承开放设计、开放开发的理念,我们也在将自己实践中的经验和问题,总结成为对未来的需求,不仅是对社区的修补和改进,更在推动社区在的设计理念、架构、协议方面前进。

未来正在到来,不论是加入社区做贡献还是直接加入我们,都非常欢迎。

参考链接

【1】 The New Stack: Security Worries Rise as Container Adoption Increases, 2019-01
【2】 Kata Containers, https://katacontainers.io
【3】 Containerd Runtime V2 (shim-v2) API
ban.jpg

本书亮点

  • 双11 超大规模 K8s 集群实践中,遇到的问题及解决方法详述
  • 云原生化最佳组合:Kubernetes+容器+神龙,实现核心系统 100% 上云的技术细节
  • 双 11 Service Mesh 超大规模落地解决方案

阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
运维 Cloud Native 持续交付
构建未来:云原生技术在企业数字化转型中的关键作用
【4月更文挑战第21天】 随着企业逐渐转向数字化运营,云原生技术以其独特的优势成为了推动转型的核心力量。本文将探讨云原生技术如何通过提供灵活、可扩展的解决方案来帮助企业应对不断变化的市场需求,同时确保系统的可靠性和安全性。我们将深入分析容器化、微服务架构、持续集成与持续部署(CI/CD)等关键技术,并讨论它们如何共同作用于企业的云原生旅程。
18 5
|
30天前
|
运维 Cloud Native 持续交付
探索云原生技术的未来发展趋势
随着云计算技术的快速发展,云原生技术作为一种新兴的技术范式正逐渐受到更多关注。本文将深入探讨云原生技术在未来的发展趋势,分析其对于软件开发、部署和运维等方面的影响,展望其在不断变化的技术环境中的应用前景。
24 1
|
27天前
|
运维 Cloud Native 持续交付
探索云原生技术的未来发展方向
随着云计算技术的不断发展,云原生技术作为一个新兴的概念逐渐受到关注。本文将探讨云原生技术的定义、特点以及未来发展方向,旨在帮助读者更好地理解和把握这一领域的发展趋势。
|
15天前
|
Cloud Native 安全 开发者
云原生技术的未来演进与应用展望
【4月更文挑战第9天】 随着企业数字化转型的不断深入,云原生技术以其独特的弹性、敏捷性和可扩展性成为推动创新的重要力量。本文将探讨云原生技术的发展趋势,分析其在各行各业中的应用前景,并针对未来的挑战提出相应的对策和建议。我们还将讨论如何利用云原生技术优化资源配置,提高业务连续性,并最终实现企业的技术升级和价值增长。
|
30天前
|
监控 Cloud Native 持续交付
云原生技术的崛起与发展
在当今数字化时代,云计算和云原生技术已经成为企业信息技术架构的重要组成部分。本文将探讨云原生技术的定义、特点以及其在当今技术发展中的重要性,同时分析云原生技术对于企业数字化转型的意义和影响。
14 2
|
1天前
|
Cloud Native Serverless 开发者
阿里云助力开发者创新:探索云原生技术的新境界
阿里云开发者社区推动云原生技术发展,提供丰富产品(如容器服务、Serverless、微服务架构、服务网格)与学习平台,助力企业数字化转型。开发者在此探索实践,共享资源,参与技术活动,共同创新,共创云原生技术新篇章。一起加入,开启精彩旅程!
37 2
|
6天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在企业数字化转型中的关键角色
【4月更文挑战第18天】 随着企业加速其数字化转型的步伐,云原生技术已成为推动创新与维护企业敏捷性的基石。本文将深入探讨云原生的概念、核心技术以及如何在企业环境中实现有效部署。我们将剖析容器化、微服务架构、DevOps和持续集成/持续部署(CI/CD)等关键技术,并讨论它们如何共同塑造一个灵活、可扩展且高效的云环境。文章还将展示通过采用云原生实践,企业能够如何优化资源利用、加快产品上市时间,并提供一流的客户体验。
|
7天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
15 1
|
9天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
22天前
|
人工智能 Cloud Native 物联网
探索云原生技术的发展趋势与应用前景
在当今数字化时代,云原生技术已经成为企业数字化转型的核心驱动力之一。本文将深入探讨云原生技术的发展趋势和应用前景,分析其在大数据、人工智能、物联网等领域的应用,并探讨未来可能的发展方向。
12 1