Container和VM的隔离性分析: (9) 总结

534 阅读2分钟

VM通过虚拟化硬件来运行操作系统和应用程序,每个虚拟机都需要独立的操作系统和硬件资源。VM除了对OS有软件隔离,VM隔离的硬件资源包括:- CPU:虚拟机可以被配置为使用特定数量的虚拟CPU。虚拟机管理程序(如VMware或Hyper-V)可以在物理CPU上动态分配虚拟CPU。

  • 内存:虚拟机可以被配置为使用特定数量的虚拟内存。虚拟机管理程序可以将虚拟内存映射到物理内存上。
  • 存储:虚拟机可以被配置为使用特定数量的虚拟磁盘空间。虚拟机管理程序可以将虚拟磁盘映射到物理磁盘上。
  • 网络:虚拟机可以被配置为使用特定的网络接口,这些网络接口可以与物理网络接口相连。和VM相比,现在的容器隔离在CPU, 内存, 存储的隔离性能都略逊于VM。我们可以通过修改host Linux的core scheduling算法来使得container之间时分复用CPU,从而达到CPU隔离的效果,也可以使用taskset的方式让不同的container独占CPU资源。存储隔离方面,我们可以通过根文件系统和mask path的方式对userspace不同的文件系统资源进行隔离,在kernel space用Linux Security Modules对kernel space不同的文件系统资源进行隔离。
    同时,本文提到的容器隔离方案都可以增强容器的安全性和隔离性,但它们也都存在一些缺点或限制,例如:- Capabilities:使用不当可能会导致容器拥有过多的权限,增加攻击面。
  • Namespaces:某些资源(例如memory)不能被隔离,一些特权操作(例如mount和unshare)需要在容器外执行。
  • seccomp:容器内的进程必须能够通过安全策略中定义的系统调用,否则可能会影响容器内应用的正常运行。
  • Linux Security Modules:需要适当的配置和管理AppArmor/SELinux等modules,否则可能会影响应用程序的正常运行。
  • 根文件系统隔离:容器的启动和管理变得更加困难,容器的体积也会变得更大。
  • Masked path:不能防止容器内的进程通过别的方式访问敏感路径,例如使用软链接或挂载其他文件系统。
  • cgroups:某些资源使用量难以预测,可能需要针对不同的应用进行优化配置。
    因此,需要给容器加强memory 隔离, filesystem的隔离, 以及以上各种策略的configuration的规范化,才能在不影响container正常工作的情况下达到VM同等的隔离效果。