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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 推荐硬件配置和本地化布署

Stable Diffusion简介 Stable Diffusion是由Stability AI开发的一种强大的文本到图像(Text-to-Image)生成模型,它能够根据用户提供的文本描述,生成与之相关的高质量、高分辨率图像。下面我从原理、特点、应用三个方面对Stable Diffusion作简要介绍: 1、原理:Stable Diffusion…

从输入url到页面展示的过程

唠唠叨:我不想误人子弟,我这篇算是搬运工,加上自己的理解做点总结,所以还请大家科学上网去看这篇:https://aws.amazon.com/cn/blogs/mobile/what-happens-when-you-type-a-url-into-your-browser/ 是这六个步骤&#…

杰发科技——Jlink插件使用

0. 简介 杰发自带的烧录工具是ATCLink,基于DapLink适配。个人不太喜欢ATCLink,推荐使用Jlink,毕竟自己买,不用问原厂要,而且带Jlink,至少5Mhz以上。 V9烧录器使用7.50以下版本驱动。 V11烧录器可以使用7…

热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜

热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜 墨天轮墨天轮国产数据库流行度排行PolarDB首度夺魁关于话题的讨论数据库流行度排行榜会影响你的数据库选型吗?对于 PolarDB 的本次登顶,你认为关键因素是什么?PolarDB“三层分离”新版…

【Review】小米汽车发布会

动力方面 顶配双电机四驱,小米超级电机21000转,最大马力673ps,峰值功率495kW,峰值扭矩838N.m。风阻系数最低0.195,零百加速最快2.78秒,时速最高265km/h。 底盘方面 前双叉臂,后无五连杆&#xf…

springcloud第4季 远程调用openfegin的介绍4

一 openfegin的介绍 1.1 openfegin的介绍 openfegin是一个声明式的web客户端;只需要创建一个rest接口并在该接口上添加注解FeginClient即可。openfeign基本上就是当前微服务之间调用的事实标准。 openfeign同时还集成了sprigcloud loadbalance。

01-XML-01认识XML

XML 被设计出来用于数据的记录和传递,经常被作用为配置文件 什么是XML 可扩展标记语言(Extensible Markup Language),没有固定的标签,所有的标签都可以自定义。使用简单的标记来描述数据通常,xml被用于信息的记录和传…

An Interview

What is your experience with Python and MySQL? Can you provide examples of projects you have worked on using these technologies? How would you handle customer requirements gathering and analysis? Can you provide an example of how you have translated cu…

C++—vector的介绍及使用 vector的模拟实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…

20240323-1-条件随机场面试题CRF

条件随机场面试题 1. 简单介绍条件随机场 条件随机场(conditional random field,简称 CRF)是给定一组输入随机变量条 件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场,是一种鉴…

【C语言】贪吃蛇【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏说明: 一个基于C语言链表开发的贪吃蛇游戏: 1. 按方向键上下左右,可以实现蛇移动方向的改变。 2. 短时间长按方向键上下左右其中之一,可实现蛇向该方向的短时间…

JQuery的attr()属性和JS的属性的方法

JQuery的attr属性: 我们先来看那一下JQuery的attr属性attr是一个jQuery方法,用于读取或设置HTML元素的属性值。它用于获取或设置HTML属性,例如src、href、title等。attr返回的值通常是属性的字符串表示。 $("标签名").attr("…

Unity 基于Rigidbody2D模块的角色移动

制作好站立和移动的动画后 控制器设计 站立 移动 角色移动代码如下: using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;public class p1_c : MonoBehaviour {// 获取动画组件private Animator …

最短路径——Floyd算法、Dijkstra算法(未完...)

这里写目录标题 例题引入: 路径——蓝桥2021省赛题目分析题解!!!求最短路径问题!!!应用场景图的基础Floyd算法Acwing-843.有边数限制的最短路简单的思路讲解 Dijkstra算法 例题引入:…

车载以太网AVB交换机 gptp透明时钟 8口 千兆/百兆可切换 SW1100TR

SW1100TR车载以太网交换机 一、产品简要分析 8端口千兆和百兆混合车载以太网交换机,其中包含2个通道的1000BASE-T1采用罗森博格H-MTD接口,5通道100BASE-T1泰科MATEnet接口和1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道…

微信开发者工具webview的页面上使用console.log,日志在哪儿看?

webview的页面上使用console.log,日志在哪儿看? | 微信开放社区

Acrobat Pro DC 2023 for Mac PDF编辑管理软件

Acrobat Pro DC 2023 for Mac是一款功能强大的PDF编辑和管理软件,旨在帮助用户轻松处理PDF文件。它提供了丰富的工具和功能,使用户可以创建、编辑、转换和注释PDF文件,以及填写和签署PDF表单。 软件下载:Acrobat Pro DC 2023 for …

程序员de工作是怎么样的?

程序员是干什么的程序员是从事计算机程序设计、开发、测试、维护的基层工作人员。他们用特定的编程语言,根据客户或项目的需求,编写和维护计算机程序。这些工作涵盖了从需求分析、设计、编码、测试,到维护的全过程。 程序员按照不同的技术领…

Matlab将日尺度数据转化为月尺度数据

日尺度转化为月尺度 clcclear all% load datadata xlread(data.xlsx) % 例如该数据为1961-01-01至2022-12-31,共计22645天data data(:,1:3) % 该数据有22645行,数据分别为降水,气温,湿度等三列dt datetime(1961-01-01):datatim…

一种调用所有LLM模型API的方式

公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识,也有全栈交流学习摸鱼群,期待您的关注! 每天3分钟开源 hi,这里是每天3分钟开源,很高兴又跟大家见面了&#xff0…