当前位置: 首页 > news >正文

CKS之安全沙箱运行容器:gVisor

目录

一、gVisor介绍

二、gVisor架构

三、gVisor使用前置条件

四、Docker中使用gVisor

五、containerd中使用gVisor

六、Kubernetes结合gVisor使用


一、gVisor介绍

        gVisor是Google开源的一种容器沙箱技术,其设计初衷是在提供较高安全性的同时,尽量减少对性能的影响。通过创建一个用户空间内核,gVisor拦截并处理容器内应用程序的系统调用,从而实现对容器内进程与宿主机内核间交互的隔离。这种设计有效防止了恶意程序利用内核漏洞对宿主机造成影响。gVisor兼容OCI标准,可以无缝集成到Docker和Kubernetes(K8s)中,使其部署和使用变得更为便捷。

项目地址:gVisor GitHub

优点:增强了容器的安全性,有效隔离了容器与宿主机内核的直接交互。

缺点:由于增加了一层抽象,会带来额外的性能开销,尤其是在系统调用频繁的场景下更为明显

二、gVisor架构

gVisor的架构主要由以下三个组件构成:

  • Runsc(Runtime Sandbox):一种运行时引擎,负责创建和销毁容器,是gVisor与容器生命周期管理交互的接口。
  • Sentry:核心组件,负责处理容器内的系统调用。Sentry运行在用户空间,模拟Linux内核的行为,处理来自容器内部的系统调用请求。
  • Gofer:负责文件系统的操作代理。所有的IO请求都会通过Gofer转发到宿主机上,从而实现文件系统操作的隔离和控制。

用户可通过Docker或containerd等容器引擎创建基于runsc的容器。容器进程的系统调用会被Sentry拦截处理,需要宿主机文件系统支持的操作会通过Gofer代理转发。

三、gVisor使用前置条件

内核要求:Linux 4.14.77+

Docker版本要求:Docker version 17.09.0及以上

系统架构要求: x86_64 和 ARM64 

四、Docker中使用gVisor

1、安装runsc
下载最新版本runsc二进制文件,放到 PATH 环境变量目录下,如 /usr/local/bin

参考文档:Installation - gVisor

set -e
ARCH=$(uname -m)
URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH}
wget ${URL}/runsc ${URL}/runsc.sha512 \${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
sha512sum -c runsc.sha512 \-c containerd-shim-runsc-v1.sha512
rm -f *.sha512
chmod a+rx runsc containerd-shim-runsc-v1
mv runsc containerd-shim-runsc-v1 /usr/local/bin

方法一:

2、配置Docker daemon
编辑dockerd配置文件(如/etc/docker/daemon.json),新增以下配置:

 {"runtimes": {"runsc": {"path": "/usr/local/bin/runsc"}}}

方法二:

2、执行install命令

/usr/local/bin/runsc install

 3、重启dockerd使配置生效

systemctl restart docker

4、运行容器时指定 --runtime=runsc 参数,切换到gVisor runsc运行时

docker run --runtime=runsc --rm hello-world

验证

使用gvisor创建的容器,内核版本已经变为4.4

未使用gvisor创建的容器,内核版本已经变为3.10,与宿主机内核版本一致

五、containerd中使用gVisor

containerd通过插件形式支持runsc,需先安装配置runsc插件。

1、安装gVisor containerd shim
下载containerd-shim-runsc-v1并放到/usr/local/bin/目录。

2、生成containerd配置

containerd config default > /etc/containerd/config.toml

3、在 config.toml 的 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] 段添加:

     [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]runtime_type = "io.containerd.runsc.v1"

4、重启containerd

sudo systemctl restart containerd

在 Pod 或容器运行时,将 runtimeClassName 指定为 runsc 即可。

六、Kubernetes结合gVisor使用

1、安装gvisor,可参考前面 在Docker中使用gVisor 的步骤

2、创建 RuntimeClass,指定gvisor作为runtime handler。
        runtimeclass.yaml

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:name: gvisor    #RuntimeClass名称
handler: runsc    #对应CRI配置名称

3、创建使用gvisor运行时的Pod
在container spec中指定 runtimeClassName: gvisor
        pod.yaml

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:runtimeClassName: gvisorcontainers:- name: helloimage: busybox

相关文章:

  • JUC:线程活跃性(死锁、活锁、饥饿)
  • Python下载bing每日壁纸并实现win11 壁纸自动切换
  • MySQL详细教程
  • 从头搭建GPT(Andrej Karpathy) 笔记
  • Vue中的MVVM
  • Jenkins磁盘空间批量清理脚本
  • 如何在Windows 10中打开屏幕键盘?这里有详细步骤
  • css的各种样式
  • Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页
  • Flink SQL 基于Update流出现空值无法过滤问题
  • FreeRTOS从代码层面进行原理分析(5 对实时性的探究)
  • Kafka硬核干货
  • macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件
  • 2024年03月CCF-GESP编程能力等级认证C++编程四级真题解析
  • 物联网学习2、MQTT 发布/订阅模式介绍
  • 分享一款快速APP功能测试工具
  • 2017年终总结、随想
  • Bytom交易说明(账户管理模式)
  • C语言笔记(第一章:C语言编程)
  • Intervention/image 图片处理扩展包的安装和使用
  • LeetCode算法系列_0891_子序列宽度之和
  • Redux系列x:源码分析
  • sessionStorage和localStorage
  • 回顾 Swift 多平台移植进度 #2
  • 世界上最简单的无等待算法(getAndIncrement)
  • 字符串匹配基础上
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • hi-nginx-1.3.4编译安装
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (02)vite环境变量配置
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (八)Flask之app.route装饰器函数的参数
  • (编译到47%失败)to be deleted
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)hibernate配置管理
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)图像的%2线性拉伸
  • .gitignore
  • .net Signalr 使用笔记
  • .NET大文件上传知识整理
  • :O)修改linux硬件时间
  • [ JavaScript ] JSON方法
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20180224]expdp query 写法问题.txt
  • [Angular 基础] - 表单:响应式表单
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [ffmpeg] x264 配置参数解析
  • [IDF]摩斯密码
  • [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
  • [LeetCode]-Spiral Matrix III 螺旋矩阵
  • [luoguP1666] 前缀单词(DP)
  • [mmucache]-ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲
  • [NLP] LlaMa2模型运行在Mac机器