vKernel 是一个内核虚拟化框架,用于增强容器之间的内核隔离。与现有的基于内核复用方法不同,vKernel 仅虚拟化隔离所需的最低限度的代码和数据。普通的执行和数据访问是在用户空间或主机内核中执行,但需要安全检查的敏感计算和访问被重定向到 vKernel。
从本质上讲,vKernel 依赖于内核 ftrace 机制拦截发送到主机内核的请求并将其重定向到 vKernel 实例(vKI),其中实现了特定于容器的系统调用表、 capabilities、文件权限列表、以及其他用户定义的功能和数据。用户可以自定义安全配置文件并生成专用的 vKernel 实例,该实例提供现有内核安全机制相同类型的安全检查,但效率更高且更安全。 vKI 可以作为内核模块动态加载和更新,并且独立于主机内核。
此外,用户还可以自定义vKernel,在特定容器中提高常用futex系统调用中的数据隔离,启用共享内核参数的不同配置,支持自定义调度策略。