[]: https://www.cnblogs.com/xidongyu/p/5767020.html
LXC又名Linux container,是一种虚拟化的解决方案,这种是内核级的虚拟化。
Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的(在Linux2.6内核以前是全局的),而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。namespace是container中使用到的重要技术之一,是对系统资源的操作上的隔离。使Guest-OS1的操作对Guest-OS2无法产生影响。
下面是3.8以上的内核实现的namespace:
User namespace中使用到了map转换,由于container并不是真正的虚拟化,所以在Guest-OS中创建的root用户会被映射到Host-OS中的普通用户中去。root用户在自己的namespace下创建了一个文件,那这个文件的所有者ID应该是0,当时在磁盘上存的时候文件UID会被转换为kuid,并且所有者ID为1000。想说名一点是在Guest-OS下你是个root用户,但是在Host-OS你只不过被转为一个普通用户而已。因为我们知道在Host-OS下已经有一个root用户了。
AWS Firecracker是一款由 AWS开源的轻量级虚拟化运行环境,客户可以在 AWS 云上和本地环境中使用它。Firecracker MicroVM 同时具备传统虚拟机的安全性和工作负载隔离能力以及容器的速度和资源利用率。运行在为 Firecracker 优化过的 Amazon 裸金属 EC2 服务器上的 MicroVM是多租户容器服务的理想选择,可以为最新的微服务或无服务器架构的现代应用提供方便、敏捷的开发和部署环境。
近年来大火的 Docker 容器,与传统虚拟机的捕获 – 模拟(Trap – and – Emulate)技术路线不同,容器最早的技术原型为 Unix 系统的 chroot 操作(诞生于1979年代),从而限制进程对指定根目录之外的文件访问。后来经历了 FreeBSD Jails、OpenVZ、LXC、libcontainer 等技术逐步演进,形成了完整的一套应用运行环境沙箱隔离技术。而 Docker 则通过一系列创新,将古老的容器沙箱技术上升到了一个新的高度。在笔者看来这其中主要包括但不局限于:
但是,
AWS 同样面临着与 Docker 容器类似的技术困扰,2014年11月推出了 AWS Lambda 服务。为了提供无服务器计算下安全的体验,最初通过后台为每个租户置备独立的 EC2 实例从而实现与其它租户的强安全隔离。随着 AWS Lambda 服务的增长,开发团队意识到需要一个新技术提供高安全性、灵活性和效率的运行时环境给类似 AWS Lambda 和 Fargate 这样的服务。
作为一款轻量级虚拟机,Firecracker 仅仅实现了以下功能:
安全始终是 AWS 关注的头等大事。虚拟化作为一项最基础的服务,其本身的安全性格外重要。从主要两个维度降低风险:
得益于极简的设备模型, Firecracker 取消了 SeaBIOS (开源的 X86 BIOS),移除了 PCI 总线,取消了 VGA 显示等等硬件模拟,严格的说它甚至不是一台完整的虚拟计算机。而 Firecracker 运行的 GuestOS 使用的也是 AWS 定制过的精简 Linux 内核,同样裁剪掉了对应的设备驱动程序、子系统等等。因此叫它 MicroVM,其启动步骤和加载项要远远少于传统虚拟机。因此 Firecracker 目前已经能提供小于125ms 的 MircroVM 启动速度,每秒150台的启动能力,小于5MiB 的内存开销,并发运行4000台的极限承载容量(AWS i3.metal EC2 作为宿主机),以及热升级能力等。
一类是基于在已有的成熟 VMM,进行编译选项裁剪和 GeustOS 精简,同样使用虚拟化技术解决问题。这类方案包括基于 QEMU-KVM 的 Hyper.sh RunV,Intel Clear Container,Pouch Container 等,基于 VMware ESXi 的 vSphere Integrated Containers,以及 Microsoft 的 Hyper-V Container。这类方案的主要不足源于这些 Hypervisor 过去用在传统虚拟机,并不是面向无服务器计算这类的现代化工作负载而设计开发,因此在安全、性能、开销方面可能会存在先天不足。
另一类则完全不使用虚拟机,以 Google 的 gVisor 以及一众 Unikernel 技术为代表gVisor 引入了进程虚拟化的思想,去掉了设备模型,将虚拟化的边界移到了系统调用层面,从而减少传统设备虚拟化的开销。而代价却是有大量的 Linux 系统调用需要沙箱处理,暴露了更多的攻击面(目前已实现了数百个系统调用)。而 Unikernel 则源于90年代的操作系统微内核理念,随着近年来容器技术的走红,这项技术也越来越被人关注(例如 Nabla container)。其核心思想是将 Linux 的宏内核拆分成为多个库,只打包应用依赖的库到微内核镜像中。每个应用拥有独立的微内核,从而提升性能,降低开销,减少攻击面。不过这些 Unikernel 项目大部分处于早期阶段,作为容器技术的竞争对手,其部署、管理以及与 OCI 的兼容性都会是一大考验。
[]: http://dockone.io/article/5280
Kata容器是一个开源项目,其利用精简化虚拟机以尽可能减少资源占用量,同时最大限度提高容器隔离能力。与gVisor一样,Kata也包含与Docker及Kubernetes相兼容的开放容器倡议(简称OCI)运行时。
gVisor的核心为一套运行非特权普通进程的内核,且支持大多数Linux系统调用。该内核使用Go编写,这主要是考虑到Go语言拥有良好的内存管理机制与类型安全性。与在虚拟机当中一样,gVisor沙箱中运行的应用程序也将获得自己的内核与一组虚拟设备
gVisor通过在用户空间内拦截应用程序系统调用并充当访客内核,gVisor能够提供强大的隔离边界。而与需要一组固定资源的虚拟机不同,gVisor能够随时适应不断变化的资源条件,这一点更像是普通Linux进程。gVisor很像是一种超虚拟化操作系统,其与完整虚拟机相比拥有更灵活的资源利用方式与更低的固定成本,但这种灵活性的代价是其系统调用成本更高且应用程序兼容性略差。
面向Serverless的安全虚拟化简介(LXC,AWS Firecracker,gVisor)
原文:https://www.cnblogs.com/roastpiglet/p/12964730.html