【问题标题】:what is a container? and gVisor?什么是容器?和gVisor?
【发布时间】:2019-01-24 08:32:29
【问题描述】:

我想了解什么是容器以及它们的用途是什么?

我有点困惑。当我开始阅读它们时,我发现它们依赖于 Linux 命名空间(是真的吗?)——一种将容器内的进程与机器上的其他进程隔离开来的方法,并给人的印象是它们的主要目的是安全.

例如,假设我拥有一台运行多个服务的服务器。我也不希望一个被黑的服务就能黑掉整个系统。所以我把每一个服务都放在一个容器里,让这个服务不能干扰机器内部的其他进程,比如杀死它们或玩弄它们的内存,这样就消除了风险。

但后来我看到了其他用途,比如能够轻松发布应用程序?或类似的东西。那么他们的主要目的是什么?我还读到,如果他们的主要目的是安全——他们就有问题。因为它们直接在主机内核上运行(再次,这是真的吗?) - 像“脏牛”这样的漏洞将或能够离开容器并能够破坏机器。所以我结束了关于 gVisor 的阅读——据我了解,它试图保护容器,并且在某些情况下成功。那么 - gVisor 有什么不同呢?它能够保护容器吗? gVisor 本身是一个容器吗?还是只是容器的运行时环境?

最后,我总是看到容器和虚拟机之间的比较,我问为什么?我应该什么时候使用它们?

我不知道我写的任何内容是否正确,如果您能指出我的错误并回答我的问题,我将很高兴。是的,我知道有很多,我很抱歉,但谢谢!

【问题讨论】:

    标签: security virtual-machine virtualization linux-containers


    【解决方案1】:

    不保证下面的答案是简洁的。欢迎大家指出我的错误。

    这可能有点模糊,因为现在很多人混合了这样的概念。

    1。 LXC

    当我第一次了解这些概念时,container 仍然是指LXC,这是 Linux 中长期存在的技术。恕我直言,容器是一个不模拟内核的完整进程。容器与普通进程的区别在于容器通过 cgroups 提供了一个隔离的view,就好像它在一个新的操作系统中一样。但实际上,容器仍然共享主机内核(你是对的),所以人们确实担心安全性,特别是当你想将它部署在公共云中时(我还没有看到人们直接在公共云上使用 LXC )。

    尽管存在潜在的不安全性,但在大多数对安全性不敏感的情况下,容器的便利性和轻量性(快速启动、小内存指纹)似乎超过了它的缺点。 docker 和 kubernetes 等工具让大规模部署和管理更加高效。

    2。虚拟机和硬件辅助虚拟化

    相对于容器,虚拟机这个概念代表了另一类隔离的执行环境。考虑到大多数虚拟机都利用了一些硬件加速技术,例如 VT-x,我假设您正在谈论硬件辅助虚拟化。虚拟机通常包含一个完整的内核

    看到这张图片来自Doug Chamberlain

    Intel VT-x technique 提供 2 种模式,root 模式(特权)和 非 root 模式(非特权)。每个模式都有自己的 ring0-ring3(例如,非根 ring3、非根 ring0、根 ring3、根环 0)。整个虚拟机运行在非root模式,hypervisor(VMM,例如kvm)运行在root模式。

    在经典的 qemu+kvm 设置中,qemu 在 root ring3 运行,kvm 在 root ring0 运行。

    guest内核的强隔离和存在使得虚拟机更加安全和兼容。但是,当然,代价是性能和效率(启动速度较慢等)

    基于容器的虚拟化

    人们想要硬件辅助虚拟化的隔离,但又不想放弃容器的便利性。因此,混合解决方案似乎真的很直观。

    目前有2个典型的解决方案,Kata Container和[gVisor][6]

    Kata Container 试图精简整个虚拟机堆栈以使其更轻量级。不过里面还是有linux的,还是个虚拟机,不过更轻量级。

    gVisor 声称是一个安全容器,但它仍然利用硬件虚拟化技术(如果您不想要虚拟化,则使用 ptrace)。有一个名为 sentry 的组件,它在非根 ring0 和根 ring3 中都运行。 sentry 将完成来宾内核的部分工作,但比 linux 小得多。如果 sentry 自己无法完成请求,它会将请求代理到主机 kenrel。

    大多数人认为 gvisor 更安全的原因是它实现了“纵深防御”——更多的间接层使人们相信它更安全。这通常是正确的,但同样不能保证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2018-04-10
      • 2018-07-17
      相关资源
      最近更新 更多