CN113986449A - 一种面向容器的Linux内核虚拟化系统及方法 - Google Patents
一种面向容器的Linux内核虚拟化系统及方法 Download PDFInfo
- Publication number
- CN113986449A CN113986449A CN202111097363.8A CN202111097363A CN113986449A CN 113986449 A CN113986449 A CN 113986449A CN 202111097363 A CN202111097363 A CN 202111097363A CN 113986449 A CN113986449 A CN 113986449A
- Authority
- CN
- China
- Prior art keywords
- kernel
- virtual
- container
- virtual kernel
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
Abstract
本发明涉及一种面向容器的Linux内核虚拟化系统,至少包括:虚拟内核构建模块,其被配置为提供虚拟内核定制模板,以允许用户编辑与定制容器虚拟内核,并基于编辑后的虚拟内核定制模板生成可加载内核模块形式的虚拟内核;虚拟内核实例模块,其被配置为对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。本发明提出的面向容器的Linux内核虚拟化系统,基于可加载模块技术,该系统在Linux内核内为每个容器提供了可定制、高性能、强安全的虚拟内核,本发明通过将Linux内核进行虚拟化,为容器提供独立的虚拟内核,支持在运行时Linux系统中为容器定制虚拟内核,不仅能够保证容器的高性能,同时极大地增强了容器的安全性。
Description
技术领域
本发明涉及计算机操作系统技术领域,尤其涉及一种面向容器的Linux内核虚拟化系统及方法。
背景技术
容器是一种新兴的轻量级操作系统级虚拟化技术,其仅包含使容器化应用程序运行的应用及其必需的执行环境即可在主机操作系统上部署运行,因此并不需要完整的客户(guest)操作系统以及虚拟化的硬件。凭借共享主机操作系统的特性,容器能有效利用云服务器并在云上高效分发与部署应用程序,带来了更高的资源利用率和运行效率。目前,容器技术已经在工业界得到广泛的普及,传统云服务提供商提供了丰富多样的容器服务来支持云端应用的快速分发与部署。然而,随着容器在云环境中的容器部署密度的激增,容器安全性也变得更加重要。同时由于容器化应用多样性的井喷,容器对内核运行时定制能力的需求也愈加迫切。
在Linux系统环境下,容器主要采用Linux内核提供的命名空间(Namespace)和控制群组(Cgroup)机制实现容器的隔离和资源限制。但本质上,Linux内核仍然是被相同主机上的所有容器共享的。Linux内核共享带来高性能的同时,也限制了不同容器自适应内核定制的能力,并且给容器安全性带来了巨大的挑战。虽然内核已经面向容器增加了诸多安全功能,但是内核层的安全特性仍然离散且不完善,需要进一步提升。面对频发的容器安全事故,以gVisor和Kata Container为代表的安全容器方案在用户态和虚拟机层为容器添加了完整的操作系统,使得容器与主机操作系统隔离开,避免了容器对主机操作系统的直接访问。这些方案为容器与主机之间、容器与容器之间提供额外的保护层,但是也将引入巨大的开销。并且他们依赖特定的操作系统内核,因此仍然无法有效解决容器内核定制能力不足的问题。
针对原生容器安全性不足而安全容器性能差的问题,大量现有研究工作提出了对共享的Linux内核进行优化的解决方案。例如,现有技术中论文“Attack surface metricsand automated compile-time os kernel tailoring”与Linux kernel tinification项目均实现了内核配置的管理方法,能够有效减少内核攻击面。但是定制的最小化共享内核难以满足不同容器的内核需求,缺乏定制性。并且,内核命名空间机制为容器隔离了部分内核参数,然而对Linux内核的命名空间进行操作涉及全局特权,存在不安全性。针对该问题,现有技术中如Seccomp安全机制以及论文“Temporal system callspecialization forattack surface reduction”提出了通过限制容器可访问系统调用以增强安全性的技术方案,但其仍无法解决系统调用表和系统调用的全局共享问题。内核的权限管理方法可以限制容器对内核的访问权限,但是这种权限管理是全局共享的,容器进程可以进行特权逃逸来影响全局系统。
现有的上述研究工作虽然在一定程度上增强了容器安全性,但是仍然无法解决全局共享的本质问题。由于缺乏对Linux内核的虚拟化,现有工作只是对共享的Linux内核进行优化与隔离,因此依旧存在明显的安全和设计缺陷。现在仍然亟需一种方法来保障容器的高性能,同时解决内核全局共享的问题来提升容器安全性。
此外,一方面由于对本领域技术人员的理解存在差异;另一方面由于申请人做出本发明时研究了大量文献和专利,但篇幅所限并未详细罗列所有的细节与内容,然而这绝非本发明不具备这些现有技术的特征,相反本发明已经具备现有技术的所有特征,而且申请人保留在背景技术中增加相关现有技术之权利。
发明内容
针对原生容器安全性不足而安全容器性能差的问题,大量现有研究工作提出了对共享的Linux内核进行优化的解决方案,例如,论文“Attack surface metrics andautomated compile-time os kernel tailoring”与Linuxkernel tinification项目均实现了内核配置的管理方法,有利于减少内核攻击面,Seccomp安全机制以及论文“Temporalsystem call specialization for attack surface reduction”提出了通过限制容器可访问系统调用以增强安全性的技术方案。现有的上述研究工作虽然在一定程度上增强了容器安全性,但是仍然无法解决全局共享的本质问题。由于缺乏对Linux内核的虚拟化,现有工作只是在共享的Linux内核进行优化与隔离,因此依旧存在明显的安全和设计缺陷。
对此,本申请提出了一种面向容器的基于内核可加载模块技术实现的Linux内核虚拟化系统,通过对内核中各种资源进行重构,并且允许为容器定制虚拟内核,为容器提供了独立的虚拟内核资源和安全策略,能够有效地解决内核全局共享的问题。本申请提出的Linux内核虚拟化系统实现的虚拟内核可以按需在容器运行时过程中加载与卸载,并且虚拟内核实例运行在内核空间,不会引入明显开销,保障了容器的高性能。此外,本申请提出的Linux内核虚拟化方法采用了统一的标准对容器请求进行转发与处理,在该设置下,极大地减少了对Linux内核源码的修改,整体技术架构简洁且不易引入额外的漏洞,保障了技术架构的安全性。更进一步地,本申请提出的Linux内核虚拟化系统对Linux内核的资源、配置与参数进行了重构与隔离,为虚拟内核提供了独立的运行地址空间,并对全局安全模块进行局部集成与优化,显著地提升了容器安全性。
本申请提出了一种面向容器的Linux内核虚拟化系统,至少包括:虚拟内核构建模块,其被配置为提供虚拟内核定制模板,以允许用户编辑与定制容器虚拟内核,并基于编辑后的虚拟内核定制模板生成可加载内核模块形式的虚拟内核;虚拟内核实例模块,其被配置为对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。
根据一种优选实施方式,所述系统还包括虚拟内核装卸模块,其用于在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,和/或在容器生命周期结束后将虚拟内核进行卸载与清除。
根据一种优选实施方式,所述系统还包括虚拟内核管理模块,其被配置为:在容器请求内核调用时,基于预定义的钩子集合和相应的ftrace回调函数,将容器内核调用请求转发至虚拟内核实例进行处理。
根据一种优选实施方式,所述虚拟内核实例模块用于创建并初始化虚拟内核实例,和/或为容器提供虚拟内核服务,和/或对Linux内核的其他部分进行复用。
根据一种优选实施方式,虚拟内核实例模块至少包括重构子模块和安全子模块,其中,重构子模块用于对Linux内核中的配置与参数进行重构,和/或对重构了Linux内核的调用表进行调用;安全子模块用于为虚拟内核提供独立的运行地址空间并且对Linux内核全局安全模块进行局部集成与优化。
根据一种优选实施方式,虚拟内核构建模块还被配置为:允许用户选择虚拟内核定制方式;通过语义分析由用户编辑得到的定制文件,生成虚拟内核源码;通过编译虚拟内核源码,输出得到可加载内核模块形式的虚拟内核;将可加载内核模块形式的虚拟内核保存进仓库待用。
根据一种优选实施方式,虚拟内核构建模块还被配置为:通过语义分析定制文件,获取虚拟内核配置、参数与调用表并将其写入虚拟内核源码;对调用过滤规则进行语义分析,将分析得到的参数检测写入相应内核调用源码;对文件权限检测规则进行语义分析,将分析得到的文件和权限信息写入虚拟内核源码数据结构中;将各部分定制源码整合生成虚拟内核源码。
根据一种优选实施方式,虚拟内核装卸模块还被配置为:通过runc运行时监控容器操作,其中:若监控到容器创建操作,根据容器名称从虚拟内核仓库获取相应的虚拟内核;结合容器id与虚拟内核名称进行虚拟内核模块重命名;将虚拟内核模块装载进Linux内核中;向虚拟内核实例模块发送初始化请求;完成相应的虚拟内核的装载。
一种面向容器的Linux内核虚拟化方法,至少包括:提供允许用户编辑与定制的虚拟内核定制模板;基于虚拟内核定制模板,生成可加载内核模块形式的虚拟内核;对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。本发明提出的面向容器的Linux内核虚拟化系统,基于可加载模块技术,该系统在Linux内核内为每个容器提供了可定制、高性能、强安全的虚拟内核(vkernel),本发明通过将Linux内核进行虚拟化,为容器提供独立的虚拟内核,支持在运行时Linux系统中为容器定制虚拟内核,定制化虚拟内核不仅能够保证容器的高性能,同时极大地增强了容器的安全性。
根据一种优选实施方式,所述方法还包括:在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,和/或在容器生命周期结束后将虚拟内核进行卸载与清除。
根据一种优选实施方式,由用户编辑虚拟内核定制模板的步骤至少包括:由用户选择虚拟内核定制方式;若用户选择自定义配置文件的虚拟内核定制方式,由用户编辑和设置虚拟内核的配置、参数与调用表,和/或由用户编辑虚拟的调用过滤以及文件权限检测的规则;通过语义分析由用户编辑得到的定制文件,生成虚拟内核源码;通过编译虚拟内核源码,输出得到可加载内核模块形式的虚拟内核;将可加载内核模块形式的虚拟内核保存进仓库待用。
根据一种优选实施方式,虚拟内核源码的生成至少包括以下步骤:通过语义分析定制文件,获取虚拟内核配置、参数与调用表并将其写入虚拟内核源码;对调用过滤规则进行语义分析,将分析得到的参数检测写入相应内核调用源码;对文件权限检测规则进行语义分析,将分析得到的文件和权限信息写入虚拟内核源码数据结构中;将各部分定制源码整合生成虚拟内核源码。
根据一种优选实施方式,所述方法还包括通过runc运行时监控容器操作,其中:若监控到容器创建操作,根据容器名称从虚拟内核仓库获取相应的虚拟内核;结合容器id与虚拟内核名称进行虚拟内核模块重命名;将虚拟内核模块装载进Linux内核中;向虚拟内核实例模块发送初始化请求;完成相应的虚拟内核的装载。
本申请还提出了一种面向容器的Linux内核虚拟化系统,至少包括:虚拟内核构建模块,其被配置为提供虚拟内核定制模板,以允许用户编辑与定制容器虚拟内核,并基于编辑后的虚拟内核定制模板生成可加载内核模块形式的虚拟内核,
虚拟内核实例模块,其被配置为对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。
根据一种优选实施方式,所述系统还包括虚拟内核装卸模块,其用于在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,和/或在容器生命周期结束后将虚拟内核进行卸载与清除。
根据一种优选实施方式,所述系统还包括虚拟内核管理模块,其被配置为:在容器请求内核调用时,基于预定义的钩子集合和相应的ftrace回调函数,将容器内核调用请求转发至虚拟内核实例进行处理。
根据一种优选实施方式,所述虚拟内核实例模块用于创建并初始化虚拟内核实例,和/或为容器提供虚拟内核服务,和/或对Linux内核的其他部分进行复用。
根据一种优选实施方式,虚拟内核实例模块至少包括重构子模块和安全子模块,其中,重构子模块用于对Linux内核中的配置与参数进行重构,和/或对重构了Linux内核的调用表进行调用;安全子模块用于为虚拟内核提供独立的运行地址空间并且对Linux内核全局安全模块进行局部集成与优化。
本申请所提出的系统包括虚拟内核构建模块、虚拟内核装卸模块、虚拟内核管理模块、虚拟内核实例模块。虚拟内核构建模块提供虚拟内核定制模板,允许用户定制容器虚拟内核,并通过自动化工具生成可加载内核模块(LKM)形式的虚拟内核。虚拟内核装卸模块负责在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,并在容器生命周期结束后将虚拟内核进行卸载与清除。虚拟内核管理模块负责定义虚拟内核入口,将内核请求转发到相应的虚拟内核处理。虚拟内核实例模块提供虚拟内核具体实现,包括实现了重构子模块与安全子模块。重构子模块对Linux内核中的配置与参数进行重构,并对重构了Linux内核的调用表进行调用。安全子模块为虚拟内核提供独立的运行地址空间并且对Linux内核全局安全模块(包括Capability、Seccomp、以及Apparmor)进行局部集成与优化。虚拟内核实例模块同时对Linux内核的其他部分进行复用。
附图说明
图1是本发明提出的Linux内核虚拟化系统的简化原理示意图;
图2是本发明提出的Linux内核虚拟化系统中虚拟内核构建模块的简化数据处理步骤示意图;
图3是本发明提出的Linux内核虚拟化系统中虚拟内核装卸模块的简化数据处理步骤示意图;
图4是本发明提出的Linux内核虚拟化系统中虚拟内核管理模块的简化数据处理步骤示意图;
图5是本发明提出的Linux内核虚拟化系统中虚拟内核实例模块的简化数据处理步骤示意图。
附图标记列表
1:虚拟内核构建模块;2:虚拟内核装卸模块;3:虚拟内核管理模块;4:虚拟内核实例模块。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
为了便于理解,将本发明的技术用语进行如下解释。
容器,容器是一个应用层抽象,用于将代码和依赖资源/软件打包成标准化单元,以用于开发、交付和部署。容器镜像是轻量的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。容器虚拟化的是操作系统而不是硬件,多个容器可以在同一台机器上运行,容器之间是共享同一套操作系统资源的,但各自作为独立的进程在用户空间中运行。容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。与虚拟机相比,容器占用的空间较少,容器镜像大小通常只有几十兆,瞬间就能完成启动。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
操作系统级的虚拟化(Operating system-level virtualization),该技术在操作系统之上虚拟多个服务器,支持在单个操作系统上简单隔离每一个虚拟服务器。Linux内核占用了一个单一的地址空间,这意味着内核或任何驱动程序错误都能导致整个操作系统停止工作,而通过虚拟化可以运行多个操作系统,如果其中一个系统由于错误而宕机,Hypervisor(管理程序)和其他的操作系统不会受到任何影响,这对调试内核来说就如同调试用户空间程序一样。
Linux内核,操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制硬件,硬件自身是不能工作的。完成这个控制工作的软件就称为操作系统,其在Linux的术语中被称为“内核”,也可以称为“核心”。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。Linux内核下接计算机硬件,对计算机硬件统一管理,然后提供系统调用接口(API)给用户进程调用。Linux内核的主要模块或组件可分以下几个部分:1、内存管理:追踪记录有多少内存存储了什么以及存储在哪里;2、进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间;3、设备驱动程序:充当硬件与进程之间的调解程序/解释程序;4、系统调用和安全防护:从流程接受服务请求。Linux内核在内核空间中工作,并从中分配内存和跟踪所有内容的存储位置,用户所看到的内容(例如Web浏览器和文件)则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。
可加载内核模块(LKM,Loadable Kernel Modules),可加载内核模块是一种支持按需加载或卸载的内核源码的机制,可以应用于在Linux内核内为容器提供定制的虚拟内核,为容器添加额外的保护层,同时能够保障容器的高性能。Linux属于单内核,为了弥补单内核的扩展性与维护性差的缺点,Linux引入动态可加载内核模块,可加载内核模块用于扩展Linux内核的功能。可加载内核模块可以在系统运行期间加载到内核或从内核卸载。模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
系统调用(systemcall或syscall),每个操作系统都有一些嵌在内核中的函数,这些函数可以被系统的每个操作使用,这些Linux使用的函数即称为系统调用,其对应于用户和内核之间的转换。系统调用是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口获得操作系统内核提供的服务。例如,用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件;通过时钟相关的系统调用获得系统时间或设置系统时间;通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。
内核符号表,内核符号表是为能够通过符号来访问程序体的对应地址或指针而建立的一个动态的、可变更的映射表格,其包含了所有的全局内核项(函数以及变量)的地址。当模块加载到内核中后,它所导出的任何符号都将成为内核公共符号表的一部分。内核符号表的每一项代表一个引出的(公共)内核符号,可被LKM访问。
内核级虚拟化技术:Kernel-based Virtual Machine,简称KVM,linux内核占据一个单一的地址空间,这意味着内核或者任何驱动程序的故障都会导致整个操作系统崩溃,而内核级虚拟化意味着可以运行多个操作系统,如果其中一个系统由于某个bug而崩溃,那么系统管理程序和其他操作系统仍可正常运行。
Namespace,namespace(命名空间)机制简单来说提供的是对全局资源的一种抽象,将资源放到不同的容器中(不同的命名空间),各容器彼此隔离,是Linux内核中用来实现Linux资源隔离的一种手段。对于常见的PID,IPC等等,这些系统资源变得不再是全局性的资源,而是属于某一个namespace专有的。对于一个namespace下的资源,它对于其他的namespace是透明的,不可见的。也就是说,在操作系统的层面,可以同时存在着两个进程号为0,1,2的进程,因为它们是属于不同的namespace的,所以它们之间并不会存在什么冲突。在Linux内核之上,可以有多个namespace空间,对于每个namespace来说,有专属于自己的进程。例如,用ps命令的话,只能列出自己这个namespace下所存在的进程,而不会看到其他的namespace下的进程。这就实现了Linux的隔离性。目前Linux namespace主要有六大类型,分别是MNT Namespace,IPC Namespace,Net Namespace,UTS Namespace,PIDNamespace,User Namespace。1、MNT Namespace:用来提供磁盘挂载点和文件系统的隔离能力;2、IPC Namespace:用来提供进程间通信的隔离能力;3、Net Namespace:用来提供网络隔离能力;4、UTS Namespace:用来提供主机名隔离能力;5、PID Namespace:用来提供进程隔离能力;6、User Namespace:用来提供用户隔离能力。不同用户的进程就是通过pid命名空间隔离开的,且不同命名空间中可以有相同pid。
Cgroup,Cgroup(控制群组)是Linux内核提供的一种机制,这种机制可以根据特定的行为,把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单来说,Cgroup可以记录、限制、隔离进程组使用的资源,指的是物理资源,例如CPU、memory、IO等,这一作用对于容器技术来说意义是非常重大的。可以说是实现绝大多数虚拟化工具的基石。Cgroup主要有以下几大功能:1.资源限制(Resource Limitation):Cgroup可以对进程组所使用的资源数量上限进行限制,例如一旦超过设置的内存限制,就会报OOM,即Out OfMemory。2.优先级分配(Prioritization):这个主要是分配CPU的时间片数量和硬盘IO的带宽,事实上这就是控制了进程运行的优先级。3.资源统计(Accounting):Cgroup的一大功能就是可以统计一些信息,例如内存的使用量、CPU的使用时间等等,这个功能对于计费来说非常方便。4.进程控制(Control):Cgroup可以执行进程的挂起和恢复等操作。Cgroup主要有以下几个特点:1.Cgroup的API实现是通过一个伪文件系统,即用户用来进行Cgroup组织管理的方式是文件操作。2.Cgroup的组织管理的操作单元最小可以精细到线程级别,对于用户态的代码来说,它也有权对系统已经分配到的资源进行创建和销毁Cgroup操作,即可以实现资源的再管理和再分配。3.资源管理功能的实现都是通过“subsystem(子系统)”,所有接口都是统一的。4.子进程在刚刚创建的时候,它和父进程是位于同一个Cgroup组中的。从本质来看,Cgroup可以看作是Linux内核在程序上附加的一系列hooks(钩子),在程序运行的时候,资源调度触发相应的hooks,从而能够实现资源的追踪和限制。
OCI,OCI(Open Container Initiative,开放容器方案)提供了两种规范:运行时规范(runtime-spec),描述了如何运行filesystem bundle(文件系统束,用于给runtime提供启动容器必备的配置文件和文件系统),对于容器的状态描述、以及对于容器的创建、删除、查看等操作进行了定义;镜像规范(image-spec),制定镜像格式、操作等。的runtimespec标准中
容器运行时(container runtime),指的是能够基于在线获取的镜像来创建和运行容器的程序,负责比如启停容器。
runc运行时,runc是一个根据OCI标准创建并运行容器的命令行工具(CLI tool),是目前使用最广泛的容器运行时。Docker就是基于runc创建的,runc是docker中最为核心的部分,容器的创建、运行、销毁等操作最终都将通过调用runc完成。而runc也有自己的客户端,后来被提取出来作为一个单独的工具和库,其实现了OCI规范,包含config.json文件和容器的根文件系统。
容器id,容器id是每个devnode的一个属性,可通过全局唯一标识符(GUID)值指定。
Ftrace,ftrace(function trace)是Linux内核中的调试跟踪机制或称跟踪框架,Ftrace给Linux提供可以查看追踪内核内部事情的能力,可以更好地查找问题区域并跟踪错误。Ftrace可以跟踪内核崩溃的events,准确地找到导致内核崩溃的原因。整个ftrace框架可以分为几部分:ftrace核心框架,RingBuffer,debugfs,Tracepoint,各种Tracer。Ftrace框架是整个ftrace功能的纽带,包括对Tracer的注册,RingBuffer的控制等等。
Hook,Hook(容器钩子)是针对容器生命周期管理引入的事件处理机制,它负责监听对容器生命周期的管理信息,并将这些信息以广播的形式通知给容器,然后执行相应的回调函数。当一个容器管理hook发生时,管理系统将会在容器中调用注册的hook handler。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。
Seccomp,secure congluting mode,即为安全计算模式。正常情况下,程序可以使用所有的syscall,这是不安全的,比如程序劫持程序流后通过execve的syscall来getshell。通过seccomp我们可以在程序中禁用掉某些syscall,这就就算劫持了程序流也只能调用部分的syscall了。
内核页表,内核页表在内核中其实即为一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直接使用。
本申请提出了一种面向容器的Linux内核虚拟化系统,至少包括虚拟内核构建模块、虚拟内核装卸模块、虚拟内核管理模块和虚拟内核实例模块。优选地,本发明的Linux内核虚拟化系统例如是:计算机、服务器等,以及其他采用Linux内核虚拟化系统的装置或系统。根据本发明实施例,除了虚拟内核构建模块、虚拟内核装卸模块、虚拟内核管理模块和虚拟内核实例模块等等,Linux内核虚拟化系统还可以包括诸如中央处理器、通信单元、存储单元、I/O单元的其他组件。例如,虚拟内核构建模块、虚拟内核装卸模块、虚拟内核管理模块和虚拟内核实例模块分别与中央处理器相连接,均与中央处理器进行信息交互。又或例如,虚拟内核构建模块、虚拟内核装卸模块、虚拟内核管理模块和虚拟内核实例模块彼此依次连接以进行信息交互。
作为示例,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本公开所描述的各种示例性的逻辑块、模块和电路。通用处理器可以是微处理器,或者,处理器也可以是任何普通的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器与DSP内核的结合,或者任何其他此种结构。作为示例,本公开的实施例可以在机器可执行指令的上下文中被描述,机器可执行指令诸如包括在目标的真实或者虚拟处理器上的器件中执行的程序模块中。一般而言,程序模块包括例程、程序、库、对象、类、组件、数据结构等,其执行特定的任务或者实现特定的抽象数据结构。在各实施例中,程序模块的功能可以在所描述的程序模块之间合并或者分割。用于程序模块的机器可执行指令可以在本地或者分布式设备内执行。在分布式设备中,程序模块可以位于本地和远程存储介质二者中。
虚拟内核构建模块用于为不同容器定制与生成虚拟内核。
为实现虚拟内核的私有化定制,虚拟内核构建模块被配置为用户提供内核配置、参数、调用表、安全特性的定制模板。用户可基于容器需求对模板进行编辑与定制,得到虚拟内核定制文件。模板包括虚拟内核的内核配置、参数、调用表以及安全特性。
虚拟内核构建模块中包括自动化构建工具。自动化构建工具获取虚拟内核定制文件,并对其进行智能语义分析,生成定制化的虚拟内核源码。自动化构建工具自动编译虚拟内核源码,并输出可加载内核模块形式的虚拟内核。
本发明通过配置虚拟内核构建模块,为用户提供了一站式容器虚拟内核定制服务。用户只需要编辑提供的模板,即可通过自动化工具生成可加载模块形式的虚拟内核,简单易操作,并且满足不同容器的定制需求。
虚拟内核装卸模块用于基于容器的生命周期对容器的定制化虚拟内核进行装载与卸载。虚拟内核装卸模块基于开放容器方案标准的runc容器运行时实现对容器操作的监测。
对于容器创建操作,由虚拟内核装卸模块在容器启动完成前将虚拟内核装载进Linux内核中。对于容器销毁操作,由虚拟内核装卸模块立即将容器的虚拟内核进行卸载与清除。
为避免不同容器使用重名内核可加载模块而在Linux内核中产生冲突的问题,在本申请中,虚拟内核装卸模块在Linux内核中实现基于容器id的虚拟内核重命名机制,为虚拟内核解决完重命名冲突后,最终将容器的PID命名空间与虚拟内核进行联结实现容器与虚拟内核的映射。基于容器id的虚拟内核重命名机制指的是基于容器id对可加载的虚拟内核模块进行重命名,可有效避免在Linux内核中产生重名冲突,以支持为每个容器加载独立的虚拟内核。
本发明通过配置虚拟内核装卸模块,实现了基于容器生命周期的自适应的虚拟内核的装卸管理。通过runc运行时监控容器操作并实现了虚拟内核的自动装载与卸载。由于runc运行时具备通用性与普遍性,本发明可以快速地集成到广泛的容器管理工具中,同时基于容器PID命名空间实现了容器与虚拟内核的映射关系,以支持将容器请求转发到对应的虚拟内核处理。
虚拟内核管理模块被配置为管理虚拟内核入口,以及将内核请求转发到虚拟内核中。虚拟内核管理模块运行在Linux内核中,预定义用于生成虚拟内核入口的钩子(hook)集合,通过内核符号表(kallsyms)获取内核中相应调用的地址,为钩子集合中内核调用开启ftrace机制生成虚拟内核入口。钩子集合中的内核调用的ftrace回调函数将容器的内核调用请求转发至虚拟内核中进行处理。
其中,内核符号表,指的是在内核的内部函数或变量中,可供外部引用的函数和变量的符号表。内核符号表在内核启动过程中创建,并实时更新,反映的是系统的当前最新情况,其内部也包含内核或者是已加载模块导出的函数、变量名称。
在容器请求内核调用时,虚拟内核管理模块基于预定义的钩子集合和相应的ftrace回调函数,将容器内核调用请求转发至虚拟内核实例进行处理。
本发明通过配置虚拟内核管理模块,实现对虚拟内核入口的统筹管理,有效增强系统的健壮性和扩展性。这有效地将系统与Linux内核解耦,可以避免对Linux源码的修改,避免系统更新导致的Linux内核更新。除此之外,虚拟内核管理模块运行在Linux内核中,有效地保障了内核调用转发到虚拟内核的高效性,不会引入额外开销。
虚拟内核实例模块是虚拟内核的具体实现,其包括重构子模块与安全子模块。虚拟内核实例模块用于创建并初始化虚拟内核实例,以及为容器提供虚拟内核服务。
重构子模块用于对虚拟内核配置、参数以及调用表进行重构,安全子模块用于提供独立地址空间以及对全局安全模块进行局部集成和优化。
重构子模块对Linux内核配置进行重构,为容器提供独立的虚拟内核配置并在相应的虚拟内核调用中生效。重构子模块创建配置结构体对内核配置重构,以使得每个容器可享有独立的虚拟内核配置。在装载虚拟内核到Linux内核的过程中,配置结构体会根据用户的定制完成初始化。在虚拟内核实例运行过程中,涉及内核配置的容器内核请求会转发到虚拟内核实例中,然后获取配置结构体中的虚拟内核配置,最终实现重构配置在内核中的生效。
重构子模块对Linux内核参数进行重构,为容器提供局部的虚拟内核参数,允许容器独立设置其参数并在虚拟内核调用中生效。重构子模块创建参数结构体对内核参数重构,以使得每个容器可享有独立的虚拟内核参数。虚拟内核管理模块用于拦截需要访问参数的内核函数,转向访问虚拟内核中参数结构体中对应的参数,实现虚拟内核参数的生效。
重构子模块同时也将Linux内核调用表进行重构,为每个容器提供独立虚拟内核调用表以及隔离的虚拟内核调用。重构子模块为容器生成虚拟内核私有化系统调用表,屏蔽部分系统调用表项,修改部分系统调用指向重构后的内核系统调用函数。虚拟内核管理模块用于拦截内核系统调用入口,从定向容器中的系统调用到虚拟内核私有化系统调用表,并跳转到对应系统调用进行处理。
安全子模块使用独立页表限制容器的虚拟内核寻址范围,实现了隔离的虚拟内核地址空间。具体来讲,该系统基于内核页表隔离机制,为内核可加载模块生成独立的页表,页表上映射的内核地址空间包括内核文本区域、CPU入口区域、当前进程数据等核心内核区域,以及当前内核模块的内存区域、独立页表分配的内存区域。当运行到虚拟内核代码时,将页表切换到本系统生成的独立页表,使虚拟内核寻址范围限制在独立页表中。
安全子模块维护了容器的权限并实现了虚拟内核层的权限检测。此处提及的容器权限包括内核函数权限、系统调用访问权限以及文件访问权限。安全子模块创建独立的的函数权限结构体维护容器层的Capability,在进行内核函数权限检查时会读取虚拟内核中的函数权限结构体来进行检查,有效防止容器进程的特权逃逸。安全子模块使用静态写入技术将Seccomp的系统调用过滤机制实现在虚拟内核源码中,基于用户配置的系统调用过滤规则生成相应的虚拟内核源码,将屏蔽的系统调用对应的虚拟内核系统调用表的表项清空,并将参数过滤封装在对应系统调用的外部。安全子模块基于索引节点虚拟化技术实现Apparmor的文件权限检测,根据自定义的文件权限规则在虚拟内核中维护索引节点号和权限信息的集合,通过标识对应的索引节点来触发虚拟内核中的文件权限检测,避免对所有文件的不必要的检测。在容器访问文件时,首先判断对应索引节点的标志位,如果未设置则不进行权限检测,否则根据索引节点号获取虚拟内核实例中维护的权限要求进行权限检测。
本申请中提及的静态写入技术指的是将配置信息写入源码的技术,具体包括对用户配置的自动分析,提取配置内容并填入源码模板中,最终输出合成的源码。
本申请中提及的Capability指的是内核将root特权细分为不同的功能组,相同功能组维护一组相似的内核函数的权限,只有进程具备功能组才可以访问相应的内核函数。
本申请中提及的调用过滤机制指的是内核处理系统调用前会基于请求源对应的过滤规则进行检查。如果该系统调用不在白名单中或者参数不满足要求,则会过滤该请求直接返回。否则内核会进入系统调用中处理。
本申请中提及的索引节点虚拟化技术指的是在索引节点的结构中添加虚拟化标志位,如果该位非零,则说明在虚拟内核中独立维护其权限信息。
本申请中提及的Apparmor指的是是基于强制访问控制的Linux安全机制,主要应用于对容器文件请求的强制访问控制。
本申请中提及的文件权限检测指的是文件操作过程中需要对请求源的权限进行检测,如果请求源具备该文件操作必需的权限,则允许该请求源的文件操作,否则会由于权限不足拒绝文件操作。文件权限检测可避免恶意容器的恶意文件访问。
本发明通过配置虚拟内核实例模块,在重构子模块中为容器创建与管理私有的虚拟内核配置、参数以及内核调用表,并在相应的虚拟内核调用过程中使私有设置生效,重构子模块各组成部分协同作用,为容器提供一个私有的虚拟内核环境并在内核请求处理过程中生效。安全子模块使虚拟内核实例运行在独立的地址空间,并实现容器层权限检测机制、基于静态写入技术的高效调用过滤机制、基于索引节点虚拟化实现的文件权限检测机制,对Linux内核全局安全模块(包括Capability、Seccomp、以及Apparmor)进行局部集成与优化,实现虚拟内核权限检测与访问控制,更进一步的保障了容器的安全性。
本申请还提出了一种面向容器的Linux内核虚拟化方法,所述方法至少包步骤S1~S8。尽管本发明具体实施方式中的Linux内核虚拟化方法以特定顺序被描绘,但这并不应该理解为要求此类操作以示出的特定顺序或以相继顺序完成,或者执行所有图示的操作以获取期望结果。在某些情况下,多任务或并行处理会是有益的。同样地,尽管上述讨论包含了某些特定的实施细节,但这并不应解释为限制任何发明或权利要求的范围,而应解释为对可以针对特定发明的特定实施例的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以整合实施在单个实施例中。反之,在单个实施例的上下文中描述的各种特征也可以分离地在多个实施例或在任意合适的子组合中实施。
S1:用户选择虚拟内核定制方式,如果选择自定义配置文件方式则转S2,否则转S3。
S2:用户编辑和设置虚拟内核的配置、参数与调用表。
S3:用户编辑虚拟的调用过滤以及文件权限检测的规则。
S4:通过语义分析由用户编辑得到的定制文件,获取虚拟内核配置、参数与调用表并将其写入虚拟内核源码。
S5:对调用过滤规则进行语义分析,将得到的参数检测写入相应内核调用源码。
S6:对文件权限检测规则进行语义分析,将得到的文件和权限信息写入虚拟内核源码数据结构中。
S7:将各部分定制源码整合成虚拟内核源码。
S8:编译虚拟内核源码输出可加载内核模块形式的虚拟内核,并将其保存进仓库待用,结束。
所述方法还包括步骤S101~S109,如图3所示。步骤S101~S109可由虚拟内核装卸模块执行。
S101:通过runc运行时监控容器操作,对于容器创建操作则转S102,对于容器销毁操作则转S107。
S102:根据容器名称从虚拟内核仓库获取相应的虚拟内核。
S103:结合容器id与虚拟内核名称进行虚拟内核模块重命名。
S104:将虚拟内核模块装载进Linux内核中。
S105:向虚拟内核实例模块发送初始化请求。
S106:虚拟内核装载完成,转S109。
S107:将虚拟内核从Linux内核中卸载。
S108:清除虚拟内核实例,转S109。
S109:结束。
所述方法还包括步骤S201~S207,如图4所示。步骤S201~S207可由虚拟内核管理模块执行。
S201:定义虚拟内核钩子(hook)集合。
S202:获取内核符号表(kallsyms)中相应内核调用地址。
S203:为钩子集合中内核调用开启ftrace机制。
S204:通过ftrace回调函数拦截容器内核调用请求。
S205:通过容器PID命名空间获取容器虚拟内核。
S206:将容器请求转发给虚拟内核处理。
S207:结束。
所述方法还包括步骤S301~S307,虚拟内核实例模块还被配置为执行步骤S301~S307。
S301:虚拟内核配置重构。创建虚拟内核配置集合,维护自定义虚拟内核配置。
S302:虚拟内核参数重构。创建虚拟内核参数集合,维护自定义虚拟内核参数。
S303:虚拟内核调用重构。创建与维护虚拟内核调用表,将支持的虚拟内核调用表项初始化,将屏蔽的虚拟内核调用的相应表项赋空值。加载重构的虚拟内核调用,并将调用地址赋值到相应虚拟内核调用表的表项中。
S304:虚拟内核地址空间隔离。创建虚拟内核地址空间相关结构,将Linux内核核心内存映射添加到页表中。
S305:虚拟内核权限检测。创建虚拟内核最高权限结构并初始化为容器权限,在虚拟内核层进行权限检测。
S306:虚拟内核调用过滤。将内核调用的过滤规则集成到虚拟内核调用表中,并在虚拟内核调用源码内进行参数检测。
S307:虚拟内核文件权限检测。初始化权限哈希表并保存自定义文件权限,设置相应文件索引节点的虚拟化标志位。虚拟内核文件权限检测过程:首先判断索引节点虚拟化标志位,然后读取哈希表内文件权限进行检测。
所述方法还包括步骤S401~S4013,如图5所示。步骤S401~S4013可由虚拟内核实例模块执行。
S401:虚拟内核实例模块接收虚拟内核装卸模块请求,创建虚拟内核实例并初始化。
S402:虚拟内核实例接收转发来的内核调用请求,将页表切换至虚拟内核页表,在隔离页表上执行内核调用。本申请中提及的虚拟内核页表以及隔离页表均指代的是独立页表。
S403:通过根据用户配置生成的虚拟内核中私有化系统调用表过滤调用请求,如果相应调用的表项不为空值则转S404,否则拒绝不支持的调用请求并转步骤S4013。
S404:进入虚拟内核调用表项所指向的调用,并判断是否需要进行参数检测,如果需要则转步骤S405,否则转步骤S406。
S405:根据用户配置的系统调用参数规则对系统调用参数进行检测,通过则转步骤S406,否则拒绝非法参数步骤并转S4013。
S406:将访问全局内核配置的内核函数重定向到虚拟内核中重新实现的函数,并从虚拟内核中获取虚拟内核配置信息。
S407:将访问全局内核参数的内核函数重定向到虚拟内核中重新实现的函数,并从虚拟内核中获取虚拟内核参数信息。
S408:将全局权限检查函数重定向到重构后的权限检查函数,到容器对应的虚拟内核中获取虚拟内核权限并进行权限检测。若通过权限检测,转步骤S409,否则拒绝越权访问转步骤S4013。
S409:判断该调用是否需要访问文件,若需要访问文件,转步骤S4010,否则转步骤S4012。
S4010:获取文件索引节点信息,检查虚拟化标志位以判断容器是否开启虚拟内核索引节点权限虚拟化功能。若设置有虚拟化标志位,转步骤S4011,否则转步骤S4012。
S4011:根据索引节点信息从权限哈希表中获取权限并进行权限检测。若权限检测通过,转步骤S4012,否则权限不足拒绝文件操作转步骤S4013。
S4012:系统调用继续执行,完毕后结束。
S4013:系统调用执行被拒绝,结束。
虚拟内核构建模块还被配置为执行步骤S501~S503。
S501:虚拟内核定制。根据容器需求,用户编辑虚拟内核的配置、参数、调用表、安全特性的模板进行虚拟内核私有化定制。
S502:虚拟内核源码生成。基于用户定制文件进行智能语义分析,根据分析结果自动生成定制化虚拟内核源码。
S503:虚拟内核编译。对虚拟内核源码进行编译输出可加载内核模块形式的虚拟内核,并保存进虚拟内核仓库待用。
虚拟内核管理模块还被配置为执行步骤S601~S604。
S601:虚拟内核装载。runc运行时监测到容器创建操作,触发虚拟内核装载。在容器启动完成前,从虚拟内核仓库中获取相应的虚拟内核,向Linux内核发送虚拟内核装载请求。
S602:虚拟内核重命名。在Linux内核装载虚拟内核过程之前,结合容器id与虚拟内核名称重命名虚拟内核。
S603:虚拟内核映射。完成虚拟内核装载后,获取容器的PID命名空间,将虚拟内核赋值容器PID命名空间的虚拟内核结构中。
S604:虚拟内核卸载。若runc运行时监测到容器销毁操作,立刻向Linux内核发送虚拟内核卸载与清除请求。
通过本申请所提出的Linux内核虚拟化方法,首先用户需要在虚拟内核构建模块中编辑虚拟内核配置模板,并生成内核可加载模块形式的虚拟内核;然后用户对容器操作时,虚拟内核装卸模块会对应容器创建操作来将加载虚拟内核到Linux内核中,并且在容器销毁时在Linux内核中清除对应的虚拟内核。容器运行过程中,虚拟内核管理模块会拦截容器的内核请求并转发到虚拟内核实例模块中处理。虚拟内核实例模块会对Linux内核进行重构以及对全局安全机制进行集成与优化,并且响应对应的容器的内核请求。
具体地,用户首先根据容器的需求,对虚拟内核的内核配置、参数、调用表、安全特性的模板进行编辑,实现虚拟内核的定制;
自动化构建工具对虚拟内核的定制文件进行智能语义分析生成虚拟内核源码,并最终编译虚拟内核源码输出可加载内核模块形式的虚拟内核;
虚拟内核装卸模块基于runc运行时实现对容器操作的监测;
虚拟内核装卸模块在容器启动完成前将相应的虚拟内核模块进行装载,并容器销毁时将其虚拟内核进行卸载和清除;
在容器请求内核调用时,虚拟内核管理模块基于预定义的钩子集合和相应的ftrace回调函数,将容器内核调用请求转发至虚拟内核实例进行处理;
虚拟内核实例模块创建并初始化虚拟内核实例,以及为容器提供虚拟内核服务;
虚拟内核实例模块的重构子模块对虚拟内核配置、参数以及调用进行重构;
虚拟内核实例模块的安全子模块则提供独立地址空间并将全局安全模块进行局部集成和优化。
需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。本发明说明书包含多项发明构思,诸如“优选地”、“根据一个优选实施方式”或“可选地”均表示相应段落公开了一个独立的构思,申请人保留根据每项发明构思提出分案申请的权利。
Claims (10)
1.一种面向容器的Linux内核虚拟化系统,其特征在于,至少包括:
虚拟内核构建模块,其被配置为提供虚拟内核定制模板,以允许用户编辑与定制容器虚拟内核,并基于编辑后的虚拟内核定制模板生成可加载内核模块形式的虚拟内核;
虚拟内核实例模块,其被配置为对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。
2.根据权利要求1所述的系统,其特征在于,所述系统还包括虚拟内核装卸模块,其用于在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,和/或在容器生命周期结束后将虚拟内核进行卸载与清除。
3.根据权利要求1或2所述的系统,其特征在于,所述系统还包括虚拟内核管理模块,其被配置为:
在容器请求内核调用时,基于预定义的钩子集合和相应的ftrace回调函数,将容器内核调用请求转发至虚拟内核实例进行处理。
4.根据权利要求1~3任一项所述的系统,其特征在于,所述虚拟内核实例模块用于创建并初始化虚拟内核实例,和/或为容器提供虚拟内核服务,和/或对Linux内核的其他部分进行复用。
5.根据权利要求1~4任一项所述的系统,其特征在于,虚拟内核实例模块至少包括重构子模块和安全子模块,其中,
重构子模块用于对Linux内核中的配置与参数进行重构,和/或对重构了Linux内核的调用表进行调用;
安全子模块用于为虚拟内核提供独立的运行地址空间并且对Linux内核全局安全模块进行局部集成与优化。
6.根据权利要求1~5任一项所述的系统,其特征在于,虚拟内核构建模块还被配置为:
允许用户选择虚拟内核定制方式;
通过语义分析由用户编辑得到的定制文件,生成虚拟内核源码;
通过编译虚拟内核源码,输出得到可加载内核模块形式的虚拟内核;
将可加载内核模块形式的虚拟内核保存进仓库待用。
7.根据权利要求1~6任一项所述的系统,其特征在于,虚拟内核构建模块还被配置为:
通过语义分析定制文件,获取虚拟内核配置、参数与调用表并将其写入虚拟内核源码;
对调用过滤规则进行语义分析,将分析得到的参数检测写入相应内核调用源码;
对文件权限检测规则进行语义分析,将分析得到的文件和权限信息写入虚拟内核源码数据结构中;
将各部分定制源码整合生成虚拟内核源码。
8.根据权利要求1~7任一项所述的系统,其特征在于,虚拟内核装卸模块还被配置为:
通过runc运行时监控容器操作,其中:
若监控到容器创建操作,根据容器名称从虚拟内核仓库获取相应的虚拟内核;
结合容器id与虚拟内核名称进行虚拟内核模块重命名;
将虚拟内核模块装载进Linux内核中;
向虚拟内核实例模块发送初始化请求;
完成相应的虚拟内核的装载。
9.一种面向容器的Linux内核虚拟化方法,其特征在于,至少包括:
提供允许用户编辑与定制的虚拟内核定制模板;
基于虚拟内核定制模板,生成可加载内核模块形式的虚拟内核;
对Linux内核进行重构与隔离,响应对应的容器的内核请求,使虚拟内核实例运行在独立的地址空间。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在容器启动时将相应的虚拟内核装载进Linux内核,维护容器与虚拟内核的映射关系,
和/或
在容器生命周期结束后将虚拟内核进行卸载与清除。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111097363.8A CN113986449A (zh) | 2021-09-17 | 2021-09-17 | 一种面向容器的Linux内核虚拟化系统及方法 |
US17/661,991 US20230092214A1 (en) | 2021-09-17 | 2022-05-04 | Container-oriented linux kernel virtualizing system and method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111097363.8A CN113986449A (zh) | 2021-09-17 | 2021-09-17 | 一种面向容器的Linux内核虚拟化系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113986449A true CN113986449A (zh) | 2022-01-28 |
Family
ID=79736120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111097363.8A Pending CN113986449A (zh) | 2021-09-17 | 2021-09-17 | 一种面向容器的Linux内核虚拟化系统及方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230092214A1 (zh) |
CN (1) | CN113986449A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579254A (zh) * | 2022-03-02 | 2022-06-03 | 科东(广州)软件科技有限公司 | 一种微内核虚拟化操作系统的系统调用方法及装置 |
CN117807039A (zh) * | 2024-02-28 | 2024-04-02 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、介质及程序产品 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116861411A (zh) * | 2023-06-05 | 2023-10-10 | 北京连山科技股份有限公司 | 基于Seccomp机制的安全沙箱数据保护方法及系统 |
CN117234953B (zh) * | 2023-11-14 | 2024-01-26 | 北京麟卓信息科技有限公司 | 一种基于影子代码缓存的内核调试方法 |
CN117667241B (zh) * | 2024-02-01 | 2024-04-26 | 龙芯中科技术股份有限公司 | 设备加载方法、装置、电子设备及存储介质 |
-
2021
- 2021-09-17 CN CN202111097363.8A patent/CN113986449A/zh active Pending
-
2022
- 2022-05-04 US US17/661,991 patent/US20230092214A1/en active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579254A (zh) * | 2022-03-02 | 2022-06-03 | 科东(广州)软件科技有限公司 | 一种微内核虚拟化操作系统的系统调用方法及装置 |
CN117807039A (zh) * | 2024-02-28 | 2024-04-02 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、介质及程序产品 |
CN117807039B (zh) * | 2024-02-28 | 2024-04-30 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
US20230092214A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113986449A (zh) | 一种面向容器的Linux内核虚拟化系统及方法 | |
CN111966305B (zh) | 持久卷分配方法、装置、计算机设备和存储介质 | |
EP3340057B1 (en) | Container monitoring method and apparatus | |
Pahl | Containerization and the paas cloud | |
US7774762B2 (en) | System including run-time software to enable a software application to execute on an incompatible computer platform | |
US8365167B2 (en) | Provisioning storage-optimized virtual machines within a virtual desktop environment | |
US8838669B2 (en) | System and method for layered application server processing | |
US20070240171A1 (en) | Device, Method, And Computer Program Product For Accessing A Non-Native Application Executing In Virtual Machine Environment | |
US8032899B2 (en) | Providing policy-based operating system services in a hypervisor on a computing system | |
CN109600269A (zh) | 一种基于dcos的云管理平台 | |
US20180367434A1 (en) | Methods and systems to adjust resources and monitoring configuration of objects in a distributed computing system | |
US20150205587A1 (en) | Adaptive cloud aware just-in-time (jit) compilation | |
US20110161988A1 (en) | Pipeline Across Isolated Computing Environments | |
US10140145B1 (en) | Displaying guest operating system statistics in host task manager | |
US20080222160A1 (en) | Method and system for providing a program for execution without requiring installation | |
WO2003088002A2 (en) | Managing multiple virtual machines | |
KR20080047372A (ko) | 멀티레벨 가상화 메카니즘을 이용하는 계층적 가상화 | |
CN106201527B (zh) | 一种基于逻辑分区的应用程序容器系统 | |
US20200241910A1 (en) | Methods and apparatus for rack nesting in virtualized server systems | |
Mavridis et al. | Orchestrated sandboxed containers, unikernels, and virtual machines for isolation‐enhanced multitenant workloads and serverless computing in cloud | |
US20090044186A1 (en) | System and method for implementation of java ais api | |
US11271895B1 (en) | Implementing advanced networking capabilities using helm charts | |
CN110502392A (zh) | 云平台管理和监控系统 | |
CN111045802B (zh) | Redis集群组件调度系统及方法、平台设备 | |
CN114510321A (zh) | 资源调度方法、相关装置和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |