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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 本文中,蚂蚁金服和阿里云的容器开发者们会共同向大家介绍安全容器的前世今生、它们在 双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 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
运维 Kubernetes 安全
容器化技术在现代运维中的应用与挑战
【7月更文挑战第19天】随着云计算和微服务架构的兴起,容器化技术已经成为现代运维工作的重要组成部分。本文将探讨容器技术如何简化运维流程、提高效率,并分析在实际应用中遇到的挑战及解决方案。我们将深入讨论Docker和Kubernetes等工具的使用场景,以及如何在保障系统安全的同时,实现快速部署和扩展。
|
20小时前
|
Cloud Native 安全 持续交付
云原生技术在现代企业中的应用与挑战
【7月更文挑战第23天】本文深入探讨了云原生技术在现代企业中的广泛应用及其带来的挑战。从容器化、微服务架构到持续集成与持续部署(CI/CD),文章详细分析了这些技术如何促进企业的数字化转型。同时,也指出了企业在采用云原生技术过程中可能遇到的安全、成本和技术适配等挑战,并提供了相应的解决策略。
14 6
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代企业的应用与挑战
【7月更文挑战第19天】随着云计算技术的不断成熟,云原生技术已成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、关键技术组件以及其在现代企业中的应用实例。同时,文章也将分析企业在采用云原生技术过程中面临的主要挑战,并提出相应的解决策略,旨在为企业实现技术创新和业务增长提供参考和指导。
28 7
|
3天前
|
运维 监控 Kubernetes
容器化技术在现代运维中的应用与挑战
【7月更文挑战第21天】随着微服务架构的兴起,容器化技术成为现代运维不可或缺的工具。Docker和Kubernetes等技术的广泛应用,不仅提升了部署效率和应用的可移植性,还带来了新的运维模式。然而,容器安全、性能监控和自动化管理等问题也随之凸显。本文将深入探讨容器化技术的应用实践和面临的主要挑战,为运维人员提供策略和建议。
17 3
|
3天前
|
存储 运维 安全
容器化技术在现代运维中的应用与挑战
【7月更文挑战第21天】随着云原生技术的飞速发展,容器化已成为现代运维不可或缺的一环。本文将深入探讨容器技术的核心优势,分析其在运维自动化、微服务架构及持续集成/持续部署(CI/CD)流程中的关键作用,同时识别并讨论容器化实施过程中遇到的主要挑战,包括安全性问题、存储与网络配置的复杂性以及状态管理等难题。通过案例分析,我们旨在为读者提供容器化技术在运维领域应用的全面视角,并指出未来发展趋势。
|
1天前
|
机器学习/深度学习 Kubernetes Cloud Native
云原生技术演进之旅:从容器到服务网格
在云计算的浪潮中,云原生技术以其独特的灵活性和可扩展性引领了新的技术革命。本文将深入探讨云原生技术的发展脉络,从容器技术的突破,到Kubernetes的集群管理,再到服务网格的微服务通信解决方案,揭示云原生如何不断适应和塑造现代应用的需求。文章将通过数据支撑和案例分析,展示云原生技术在实际应用中的优势和挑战,并预测其未来的发展趋势。
10 1
|
3天前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战
【7月更文挑战第21天】随着云计算技术的飞速发展,云原生作为一种新兴的构建和运行应用程序的方法,正逐渐成为企业数字化转型的核心。本文将深入探讨云原生技术的基本概念、核心优势以及在实际应用中面临的挑战,旨在为企业提供云原生转型的参考和指导。
|
2天前
|
运维 Kubernetes Cloud Native
云原生技术的未来演进:探索服务网格和无服务器架构的融合
随着企业数字化转型的不断深入,云原生技术已成为推动现代软件开发的关键力量。本文深入探讨了服务网格和无服务器架构这两大云原生技术趋势,分析了它们各自的优势以及未来可能的融合点。通过对比分析和案例研究,我们揭示了这两种技术如何互补并共同推进云原生生态系统的发展,同时指出了实践中面临的挑战和潜在的解决方案。 【7月更文挑战第22天】
|
2天前
|
Rust Cloud Native Java
在云原生环境下,哪种类型的语言或技术可能更具优势
在云原生环境下,哪种类型的语言或技术可能更具优势?
|
2天前
|
运维 Kubernetes Docker