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

news/2024/10/20 5:19:56/

目录

一、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


http://www.ppmy.cn/news/1401772.html

相关文章

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言,制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点,美摄科技凭借其深厚的技术积累和创新能力,推出了面向企业的H5/小程序视频方案解决方案,为企业提供了一种轻量化、高效、便捷的视频制作方式…

【Python笔记-FastAPI】定时任务实现(APScheduler)

目录 一、常见触发器 (一) DateTrigger (二) IntervalTrigger (三) CronTrigger (四) CombinationTrigger 二、代码示例 (一) task_scheduler.py (二) client.py 三、调用说明 (一) 注册任务 (二) 查询任务 (三) 删除任务 实现功能: 定时任务注册、修改、删除、查…

创业项目开发(持续更新)

最近项目梳理: 一、业务目标 最重要的业务目标就是要能实现自己做事情赚钱。所以有两个维度,第一个维度就是最重要的就是自己做事情。第二个维度才是赚钱。 如果要自己做事情,需要什么样的事情,这个事情的目标是什么&#xff0…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数

solution1 直观上的分数处理 #include <iostream> using namespace std; int main() {printf("1048575/524288");return 0; }#include<stdio.h> #include<math.h> typedef long long ll; struct fraction{ll up, down; }; ll gcd(ll a, ll b){if…

OpenHarmony error: signature verification failed due to not trusted app source

问题&#xff1a;error: signature verification failed due to not trusted app source 今天在做OpenHarmony App开发&#xff0c;之前一直用的设备A在测试开效果&#xff0c;今天换成了设备B&#xff0c;通过DevEco Studio安装应用程序的时候&#xff0c;就出现错误&#xf…

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图…

RIP环境下的MGRE 综合实验

实验题目及要求&#xff1a; 1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2于R5之间使用PPP的chap认证&#xff0c;R5为主认证方&#xff1b; R3于R5之间使用HDLC封装。 3.R1/…

罗永浩直播阿里云服务器是哪款?ECS经济型e实例性能如何?

罗永浩直播卖阿里云&#xff0c;带货爆款云服务器ECS经济型e实例是什么&#xff1f;阿里云服务器ECS经济型e实例的使命是什么&#xff1f;一般来讲&#xff0c;学生、开发者和小微企业主要使用云服务器主要开展网站建设、开发测试和业务灾备、搭建小程序后端服务、Web应用、云上…