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

本文涉及的产品
服务治理 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
相关文章
|
8天前
|
运维 Cloud Native 安全
构建未来:云原生技术在企业数字化转型中的关键作用
【4月更文挑战第30天】 随着企业加速数字化步伐,云原生技术已成为推动创新与维持市场竞争力的重要驱动力。本文将深入探讨云原生技术的基本原理、关键组成部分以及如何通过这些技术实现敏捷开发和自动化运维。我们将分析容器化、微服务架构、DevOps实践和持续集成/持续部署(CI/CD)流程等云原生核心概念,并讨论它们如何共同塑造一个灵活、可扩展且高度可用的系统环境。此外,我们还将探索云原生安全策略,确保在追求速度和效率的同时不牺牲安全性。
|
16小时前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
7 0
|
2天前
|
监控 安全 数据安全/隐私保护
【Docker专栏】Docker容器安全:防御与加固策略
【5月更文挑战第7天】本文探讨了Docker容器安全,指出容器化技术虽带来便利,但也存在安全隐患,如不安全的镜像、容器逃逸、网络配置不当等。建议采取使用官方镜像、镜像扫描、最小权限原则等防御措施,并通过安全的Dockerfile编写、运行时安全策略、定期更新和访问控制等加固容器安全。保持警惕并持续学习安全实践至关重要。
【Docker专栏】Docker容器安全:防御与加固策略
|
2天前
|
边缘计算 运维 Cloud Native
探索云原生技术的未来发展趋势
随着数字化时代的不断深入,云原生技术已成为企业数字化转型的重要支撑。本文将探讨云原生技术的定义、特点以及未来发展趋势,重点关注容器化、微服务、自动化运维等方面,展望云原生技术在未来的发展方向与挑战。
19 1
|
4天前
|
Cloud Native 安全 Devops
构建未来:云原生技术在企业数字化转型中的关键角色
【5月更文挑战第5天】 随着企业加速其数字化进程,云原生技术已成为推动创新和灵活性的重要力量。本文探讨了云原生技术的核心组件、实施策略以及它们如何帮助企业实现敏捷开发和持续交付。通过深入分析容器化、微服务架构、DevOps实践和自动化工具的融合,揭示了这些技术如何共同作用,支持企业在竞争激烈的市场中快速适应变化。同时,文章还将讨论云原生安全挑战及应对措施,为读者提供一个全面的云原生技术应用视角。
39 14
|
4天前
|
Cloud Native 持续交付 云计算
构建未来:云原生技术在企业数字化转型中的关键作用
【5月更文挑战第5天】 随着企业不断探索在竞争激烈的市场中保持敏捷和创新的方法,云计算已经成为了推动数字化转型的重要动力。特别是云原生技术,作为构建和运行应用程序的一种新范式,正在改变企业开发、部署及管理软件的方式。本文将深入探讨云原生架构的核心组件、它如何促进企业的敏捷性,以及在采用云原生技术时面临的挑战和解决策略。通过分析案例研究和行业趋势,我们将揭示云原生技术在未来企业数字化道路上扮演的角色,并为希望利用这些技术的决策者提供实用的见解。
|
5天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在企业数字化转型中的关键作用
【5月更文挑战第4天】 随着企业加速其数字化进程,云原生技术已不仅仅是一种趋势,而是成为了推动创新和业务敏捷性的核心力量。本文将探讨云原生架构如何为企业提供弹性、可扩展及自动化的基础设施,以及它如何支持企业在竞争激烈的市场中快速响应变化。通过深入分析云原生技术的组成部分,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps文化,我们揭示了这些技术如何共同塑造一个灵活且高效的企业IT环境。
18 0
|
5天前
|
Cloud Native Devops 持续交付
构筑未来:云原生技术在企业数字化转型中的关键作用
【5月更文挑战第4天】 随着企业加速迈向数字化时代,云原生技术已不仅仅是一种趋势,而是转型成功的必要条件。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,并分析它们如何共同促进企业的敏捷性、可扩展性和创新能力。通过具体案例,我们还将揭示这些技术如何帮助企业实现资源优化、风险降低和更快的市场响应时间。
24 7
|
6天前
|
存储 缓存 安全
Golang深入浅出之-Go语言中的并发安全容器:sync.Map与sync.Pool
Go语言中的`sync.Map`和`sync.Pool`是并发安全的容器。`sync.Map`提供并发安全的键值对存储,适合快速读取和少写入的情况。注意不要直接遍历Map,应使用`Range`方法。`sync.Pool`是对象池,用于缓存可重用对象,减少内存分配。使用时需注意对象生命周期管理和容量控制。在多goroutine环境下,这两个容器能提高性能和稳定性,但需根据场景谨慎使用,避免不当操作导致的问题。
28 4
|
8天前
|
运维 Cloud Native 持续交付
构建未来:云原生技术在企业数字化转型中的应用
【5月更文挑战第1天】 随着企业加速其数字化转型的步伐,云原生技术作为推动创新和灵活性的关键力量,正变得日益重要。本文深入探讨了云原生技术如何为企业提供高度可扩展、灵活且安全的解决方案,以及它如何支持企业在不断变化的市场环境中保持竞争力。通过对容器化、微服务架构、持续集成/持续部署(CI/CD)等核心技术的剖析,揭示了它们如何共同塑造一个更加敏捷和响应迅速的开发环境。文章还讨论了企业在采纳云原生技术过程中面临的挑战,并提出了一系列策略建议,以帮助企业顺利过渡到云原生模式。