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

打印 上一主题 下一主题

主题 577|帖子 577|积分 1731

目录
一、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
  1. set -e
  2. ARCH=$(uname -m)
  3. URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH}
  4. wget ${URL}/runsc ${URL}/runsc.sha512 \
  5.     ${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
  6. sha512sum -c runsc.sha512 \
  7.     -c containerd-shim-runsc-v1.sha512
  8. rm -f *.sha512
  9. chmod a+rx runsc containerd-shim-runsc-v1
  10. mv runsc containerd-shim-runsc-v1 /usr/local/bin
复制代码
方法一:
2、设置Docker daemon
编辑dockerd设置文件(如/etc/docker/daemon.json),新增以下设置:
  1. {
  2.    "runtimes": {
  3.       "runsc": {
  4.          "path": "/usr/local/bin/runsc"
  5.       }
  6.    }
  7. }
复制代码
方法二:
2、实行install命令
  1. /usr/local/bin/runsc install
复制代码

 3、重启dockerd使设置生效
  1. systemctl restart docker
复制代码
4、运行容器时指定 --runtime=runsc 参数,切换到gVisor runsc运行时
  1. 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设置
  1. containerd config default > /etc/containerd/config.toml
复制代码
3、在 config.toml 的 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] 段添加:
  1.      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]
  2.        runtime_type = "io.containerd.runsc.v1"
复制代码
4、重启containerd
  1. sudo systemctl restart containerd
复制代码
在 Pod 或容器运行时,将 runtimeClassName 指定为 runsc 即可。


六、Kubernetes结合gVisor使用

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

2、创建 RuntimeClass,指定gvisor作为runtime handler。
        runtimeclass.yaml
  1. apiVersion: node.k8s.io/v1
  2. kind: RuntimeClass
  3. metadata:
  4.   name: gvisor    #RuntimeClass名称
  5. handler: runsc    #对应CRI配置名称
复制代码

3、创建使用gvisor运行时的Pod
在container spec中指定 runtimeClassName: gvisor
        pod.yaml
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: mypod
  5. spec:
  6.   runtimeClassName: gvisor
  7.   containers:
  8.   - name: hello
  9.     image: busybox
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表