容器技术与容器安全

虚拟化与容器技术

虚拟化技术是一种将计算机物理资源(CPU提供的运算控制资源、硬盘提供的数据存储资源、网卡提供的网络传输资源等硬件资源)进行抽象、转换为虚拟的计算机资源从而提供给程序使用的技术。利用虚拟化技术,我们可以提高计算机资源使用率,使得计算机资源不被浪费。

虚拟机(VM)

通过一个虚拟机监视器(Virtual Machine Monitor,同Hypervisor)来隔离操作系统(OS)与硬件或者应用程序与操作系统,以此达到虚拟化的目的。虚拟机可以将一台服务器变成多台服务器,Hypervisor层允许在一台机器上运行多个VM。每个VM都包括操作系统、应用程序、必要的二进制文件和库,一般占用数十GB空间。虚拟机启动速度很慢,性能低下。

虚拟化的重要实现:用来搭建虚拟操作系统环境的VMware Workstation、Xen等软件,Java虚拟机JVM,PHP虚拟机HHVM等。

容器(Container)技术

更轻便与高效的虚拟化技术,在操作系统层面实现了对计算机系统资源的虚拟化,在操作系统中通过对CPU、内存和文件系统等资源进行隔离、划分和控制,实现进程间透明的资源使用。在容器中,代码、运行时和各种依赖与配置被打包在一起,多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核。每个容器在用户空间中作为独立进程进行。与VM相比,容器占用的空间更小(容器镜像一般大小为几十MB),并且由于没有虚拟操作系统和hypervisor这两个层次,应用程序运行所带来的额外消耗大幅减少。

虚拟机自带操作系统(可以与宿主机一样,可以不一样);容器与宿主机共享一个操作系统。

不同点

容器

虚拟机

启动速度

秒级

分钟级

运行性能

接近原生

50%左右损失

磁盘占用

MB

GB

数量

成百上千

一般几十台

隔离性

进程级别

系统级别(更彻底)

操作系统

主要支持Linux

几乎所有

封装程度

只打包项目代码和依赖关系,共享宿主机内核

完整的操作系统,与宿主机隔离

Docker底层技术

Docker使用Go语言编写,并用到了Linux内核的多项功能,如cgroup(control group),namespace等(因此Docker是运行于Linux之上的,当在Windows或MacOS上使用Docker,实际上是运行在一个“隐藏的Linux”之上)。

Docker使用Linux内核提供的一种名为namespace(命名空间)的技术来创建容器。当运行一个容器时,Docker会为这个容器创建一组命名空间。这些命名空间提供了一层隔离,Docker引擎使用了pid、net、ipc、mnt、uts命名空间。Docker容器本质上是由一组互相重叠的层所组成的,然后容器引擎将其合并到一起,这些层都是只读的。

  1. pid命名空间:进程隔离(PID:Process ID)
  2. net命名空间:管理网络接口(NET:Networking)
  3. ipc命名空间:管理对IPC资源的访问权限(IPC:InterProcess Communication)
  4. mnt命名空间:管理文件系统挂载点(MNT:Mount)
  5. uts命名空间:隔离内核和版本标识符(UTS:Unix Timesharing System)

cgroupnamespace

  • cgroup支持了对于进程资源的使用限制
  • namespace提供了对进程资源的隔离限制
Docker常用指令

docker常用命令 | 运维八一

容器安全

容器环境,或者叫容器云,其本质是云计算的一种实现方式,我们可以将其称为Paas或者CaaS。 容器技术是云原生体系的底层,因而容器安全也是云原生安全的基石。事实上容器逃逸比虚拟机逃逸容易很多,所以容器环境的安全是云原生安全的重中之重。

总体而言,容器层面的安全可以分为以下几部分。

  • 容器环境基础设施的安全性,比如主机上的安全配置是否会影响到其上运行的容器,主机上的安全漏洞和恶意进程是否会影响到容器,容器内的进程是否可以利用主机上的安全漏洞,等等。
  • 容器的镜像安全,包括镜像中的软件是否存在安全漏洞,镜像在构建过程中是否存在安全风险,镜像在传输过程中是否被恶意篡改,等等。
  • 容器的运行时安全,比如运行的容器间的隔离是否充分,容器间的通信是否是安全的,容器内的恶意程序是否会影响到主机或者其他容器,容器的资源使用情况是否安全,等等。
  • 整个容器生态的安全性,比如 Docker 自身的安全性如何, Service Mesh/Serverless对容器安全有什么影响,容器中安全密钥的管理与传统环境有什么不同,容器化后的数据隐私保护与传统的数据隐私保护是否一致,等等。

Docker的安全机制

  • Linux Capability 
    • Docker默认对User Namespace不进行隔离,在容器内部会发现uid为0,即容器内部的root其实为宿主机root。但很多操作不能进行,这是通过Linux Capability实现的
    • Linux Capability打破了操作系统中超级用户和普通用户的概念,普通用户通过设置Capability也可以实现超级用户的某些操作
    • Linux Capability共38种,docker默认开启14种,可有效避免很多安全问题。如果运行容器时使用了--privileged=true选项,那么就是开启了全部的capability
  • AppArmor
  • SELinux
  • Seccomp

参考资料:

  1. https://github.com/Metarget/cloud-native-security-book/tree/main
  1. https://github.com/Metarget/cloud-native-security-book/blob/main/appendix/200_%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF.pdf
  2. Docker学习笔记之浅谈虚拟化和容器技术 - 阅读清单 - 腾讯云开发者社区-腾讯云
  3. What is a Container? | Docker
  4. Docker overview | Docker Docs
  5. Docker安全_docker安全性问题_怎么也想不出名字的博客-CSDN博客

参考视频:

  1. https://www.youtube.com/watch?v=cPGZMt4cJ0I&t=0s
  2. https://www.youtube.com/watch?v=-YnMr1lj4Z8&list=PLhixgUqwRTjxtDt2ABuejRxrIFSroqyEY&index=4&t=6s

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值