0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

iSulad+Kuasar+StratoVirt安全容器解决方案的使用介绍

openEuler 来源:openEuler 2023-11-20 17:00 次阅读

概述

Kuasar 是今年华为在 CNCF 峰会上发布的支持多种沙箱隔离技术的容器运行时 [1],可以在单个节点上运行多种不同类型的沙箱容器;同时采用了 1:N 的容器进程管理模型,对比当前 Shim 进程 1:1 的设计,在容器并发时能够提升启动速度 2 倍以上、并节省容器管理进程 99% 的内存增量。Kuasar 基于 Sandbox API [2] 接口开发,区别于当前的 Shim v2 接口,对沙箱的生命周期管理具有内存消耗小、调用链简短等优势。

openEuler 社区通过 iSulad 组件率先完成了对 Sandbox API 的支持,并在近日发布的 openEuler 23.09上内置了 Kuasar,用户可以一键部署 iSulad+Kuasar+StratoVirt 这一套极速轻量的安全容器解决方案 [3]。关于 iSulad+Kuasar 统一容器运行时解决方案的架构和所带来的优势,可参考上一篇系列文章 [4]。

本文将详细介绍该解决方案的安装与使用方式,支持用户快速上手。

d5825bb0-7324-11ee-939d-92fbcf53809c.png

图 1iSulad+Kuasar+StratoVirt 安全容器解决方案架构

安装与配置

说明:kuasar 的安装和使用均需要 root 权限。

前提条件

1. 为了获取更好的性能体验,该方案需要运行在裸金属服务器上,暂不支持运行在虚拟机内。

2. 安装 openEuler 23.09 操作系统

3. 安装启动沙箱及容器需要使用的 cri 命令行工具 crictl 。

#arm环境
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-arm64.tar.gz
$ tar -zxvf crictl-v1.25.0-linux-arm64.tar.gz -C /usr/local/bin
#x86环境
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz
$tar-zxvfcrictl-v1.25.0-linux-amd64.tar.gz-C/usr/local/bin

4. 安装配置网络需要使用的 cni 插件。

#创建cni目录
$mkdir-p/opt/cni/bin&&mkdir-p/etc/cni/net.d 
# arm环境
$ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-arm64-v1.3.0.tgz
$ tar -zxvf cni-plugins-linux-arm64-v1.3.0.tgz -C /opt/cni/bin/
#x86环境
$ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
$ tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/

一键安装

通过下述指令可以在 openEuler 23.09 上一键安装 iSulad、kuasar 和 stratovirt 组件:

$ yum install iSulad kuasar stratovirt

组件配置

crictl 命令行工具的配置

修改 crictl 配置文件 /etc/crictl.yaml 以对接 isulad

$ cat /etc/crictl.yaml
runtime-endpoint: unix:///var/run/isulad.sock
image-endpoint: unix:///var/run/isulad.sock

iSulad容器引擎的配置

修改 iSulad 容器引擎的配置文件 /etc/isulad/daemon.json ,以支持 iSulad 调用 kuasar 启动 vmm 类型的 sandbox ,需在配置文件中新增如下字段:

$ cat /etc/isulad/daemon.json
...
    "cri-sandboxers": {
        "vmm": {
            "name": "vmm",
            "address": "/run/vmm-sandboxer.sock"
        }
    },
    "cri-runtimes": {
        "vmm": "io.containerd.vmm.v1"
    },
...

保存后重新启动 iSulad 服务

$ systemctl restart isulad

之后可通过指令 `systemctl status iSulad` 确认 iSulad 服务已处于 running 状态

kuasar的配置

修改对接 stratovirt 的 kuasar 配置文件(可直接使用 kuasar rpm 包安装好后的默认配置,路径位于 /var/lib/kuasar/config_stratovirt.toml )

$cat/var/lib/kuasar/config_stratovirt.toml
[sandbox]
log_level = "info" #指定kuasar日志级别,默认为info


[hypervisor]
path = "/usr/bin/stratovirt" #指定stratovirt二进制路径
machine_type = "virt,mem-share=on" #指定模拟芯片类型,ARM架构为virt,x86架构为q35
kernel_path = "/var/lib/kuasar/vmlinux.bin" #指定guest kernel执行路径
image_path = "" #指定guest image执行路径
initrd_path = "/var/lib/kuasar/kuasar.initrd" #指定guest initrd执行路径,与image二选一
kernel_params = "task.log_level=debug task.sharefs_type=virtiofs" #指定guest内核运行参数
vcpus = 1 #指定每个沙箱的默认vCPU数量,默认为1
memory_in_mb = 1024 #指定每个沙箱的默认内存大小,默认为1024 MiB
block_device_driver = "virtio-blk" #指定块设备驱动
debug = true #指定是否开启debug模式
enable_mem_prealloc=false#指定是否开启内存预占


[hypervisor.virtiofsd_conf]
path = "/usr/bin/vhost_user_fs" #指定vhost_user_fs路径

保存后重新启动 kuasar-vmm 服务

$ systemctl restart kuasar-vmm

之后可通过指令 `systemctl status kuasar-vmm` 确认 kuasar-vmm 服务已处于 running 状态

部署沙箱与容器

启动沙箱与容器

以上配置完毕后,可以使用 crictl 命令行部署 pod 沙箱和容器,操作步骤如下:

1. 准备 pod 和 container 的 yaml 配置文件,范例如下:

 $ cat podsandbox.yaml
metadata:
     name: busybox-sandbox
     namespace: default
     uid: hdishd83djaidwnduwk28bcsc
log_directory:/tmp
linux:
     namespaces:
       options: {}


 $ cat pod-container.yaml
metadata:
     name: busybox
image:
image:docker.io/library/busybox:latest
command:
-top
log_path:busybox.log

2. 通过 `crictl run`命令启动一个 pod 以及对应的业务容器,指定 runtime 为 vmm

$ crictl run -r vmm container-config.yaml podsandbox-config.yaml

3. 查看 pod 列表,pod 为 Ready 状态

 $ crictl pods
PODIDCREATEDSTATENAMENAMESPACEATTEMPT
5cbcf744949d8AboutaminuteagoReadybusybox-sandboxdefault1

查看容器列表,容器为 Running 状态

$ crictl ps
CONTAINERIMAGECREATEDSTATENAMEATTEMPTPODID
c11df540f913edocker.io/library/busybox:latest2minutesagoRunningbusybox05cbcf744949d8

至此,pod 和容器已启动完毕,均处于运行状态。

检验沙箱与容器

进入 pod 沙箱的 shell 环境进行调试:

# 查看获取pod对应stratovirt进程内的vsock guest-cid
$ ps -ef | grep stratovirt | grep 5cbcf744949d8
/usr/bin/stratovirt -name sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 ...
-device vhost-vsock-pci,id=vsock-395568061,guest-cid=395568061,bus=pcie.0,addr=0x3,vhostfd=3
...
# 使用ncat命令进入沙箱shell
$ yum install -y nmap && ncat --vsock 395568061 1025
bash-6.4#

测试 pod 网络连接:

# 在pod shell环境内执行
bash-6.4# ip addr show
1: lo:  mtu 65536 qdisc noqueue qlen 1000
    link/loopback 000000:00 brd 000000:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 429239:9f brd ffffff:ff
    inet 172.19.0.240/24 brd 172.19.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80:92ff399f/64 scope link
       valid_lft forever preferred_lft forever
# 测试pod与主机之间网络连通性(172.19.0.1为主机上的网关)
bash-6.4 #ping172.19.0.1
PING 172.19.0.1 (172.19.0.1): 56 data bytes
64 bytes from 172.19.0.1: seq=0 ttl=64 time=0.618 ms
64 bytes from 172.19.0.1: seq=1 ttl=64 time=0.116 ms
64 bytes from 172.19.0.1: seq=2 ttl=64 time=0.152 ms

能够观察到,pod 已经正常工作起来并已经完成与外部主机的连通。

以上创建 pod 沙箱的过程并没有新增 shim 进程,而是在 kuasar 提供的 vmm-sandboxer 进程内部新增了 sandbox 实例实现的。通过下述方式也可以查看 kuasar 与虚拟化引擎 stratovirt 的联系。查看该容器 pod 所对应 stratovirt 进程,其 kernel 与 initrd 等路径均与 kuasar 配置文件中指定的一致。

$ ps -ef | grep stratovirt | grep 5cbcf744949d8
/usr/bin/stratovirt -name sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3...-kernel 
/var/lib/kuasar/vmlinux.bin -initrd /var/lib/kuasar/kuasar.initrd...

同时该 pod 沙箱与主机侧通信的 sock 套接字、日志等文件均位于 kuasar 路径下:

$ ls -al /run/kuasar-vmm/5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3/
console.sock
sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.log
sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.pid
...

以上就是 iSulad+Kuasar+StratoVirt 安全容器解决方案的使用介绍,更多关于 Kuasar 的使用可以进入 openEuler 官网查看 [5]。

后续 CloudNative SIG 将继续对 iSulad 实现 Sandbox API、Kuasar 支持 wasm 等特性进行详细介绍,敬请期待!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7640

    浏览量

    148509
  • 操作系统
    +关注

    关注

    37

    文章

    6288

    浏览量

    121887
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21883
  • openEuler
    +关注

    关注

    2

    文章

    289

    浏览量

    5661

原文标题:openEuler 23.09 一键部署基于 Kuasar 的极速轻量安全容器

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    立体智慧仓储解决方案.#云计算

    解决方案智能设备
    学习电子知识
    发布于 :2022年10月06日 19:45:47

    安全容器的发展与思考

    。所以,针对未修改的应用的安全容器方案就落在了中间两种方案——MicroVM 和进程虚拟化上,前者是使用了轻量级虚机和裁剪过的 Linux 内核,在保证兼容性的前提下尽量降低运行时和维
    发表于 09-29 15:51

    求一款视频监控/安全系统的解决方案

    本文介绍了一种基于FPGA的视频监控/安全系统的解决方案
    发表于 04-29 07:17

    StratoVirt 中的虚拟网卡是如何实现的?

    StratoVirt 当前支持 Virtio-net/Vhost-net/Vhost-user-net 三种虚拟网卡,这三种虚拟网卡都基于 virtio 协议实现数据面。Virtio-net 数据面
    发表于 08-10 11:16

    关于NXP汽车安全解决方案介绍(一)

    这次交流会将展示汽车安全和NXP汽车安全解决方案。NXP提供各种支持汽车安全规范的MCU,包括支持安全硬件扩展(SHE)标准, GM glo
    的头像 发表于 06-28 17:40 4969次阅读

    关于NXP汽车安全解决方案介绍(二)

    这次交流会将展示汽车安全和NXP汽车安全解决方案。NXP提供各种支持汽车安全规范的MCU,包括支持安全硬件扩展(SHE)标准, GM glo
    的头像 发表于 06-28 17:14 3290次阅读

    介绍基于ISO26262安全计算平台解决方案

    英飞凌基于ISO26262安全标准的安全计算平台的解决方案介绍
    的头像 发表于 07-11 01:24 4147次阅读

    品高软件:iSula+StratoVirt轻量虚机容器解决方案

    欧拉openEuler Summit 2021直播会上,品高软件生态总监王彦文给我们介绍了iSula+StratoVirt轻量虚机容器解决方案
    的头像 发表于 11-10 10:22 1150次阅读
    品高软件:iSula+<b class='flag-5'>StratoVirt</b>轻量虚机<b class='flag-5'>容器</b><b class='flag-5'>解决方案</b>

    openEuler Summit开发者峰会:iSula+StratoVirt轻量虚机容器解决方案展示

    openEuler Summit开发者峰会:iSula+StratoVirt轻量虚机容器解决方案展示
    的头像 发表于 11-10 10:46 1323次阅读
    openEuler Summit开发者峰会:iSula+<b class='flag-5'>StratoVirt</b>轻量虚机<b class='flag-5'>容器</b><b class='flag-5'>解决方案</b>展示

    欧拉(openEuler)Summit 2021:欧拉demo分享——iSula + StratoVirt

    欧拉(openEuler)Summit 2021上,关于iSula + StratoVirt轻量虚机容器解决方案分享。 以及iSula+ StratoVirt与品高
    的头像 发表于 11-10 10:39 1037次阅读
    欧拉(openEuler)Summit 2021:欧拉demo分享——iSula + <b class='flag-5'>StratoVirt</b>

    StratoVirt中vCPU管理模块的组成及位置

    StratoVirt是开源在openEuler社区的轻量级虚拟化平台,具备轻量低噪、强安全性的行业竞争力。
    的头像 发表于 12-20 15:41 1716次阅读

    StratoVirt 中的 balloon 设备介绍

    StratoVirt 是计算产业中面向云数据中心的企业级虚拟化 VMM,实现了一套架构统一支持虚拟机、容器、Serverless 三种场景。StratoVirt 在轻量低噪、软硬协同、Rust 语言级
    的头像 发表于 12-21 14:56 1838次阅读

    iSulad云原生轻量级容器解决方案

    ./oschina_soft/gitee-iSulad.zip
    发表于 05-10 10:30 1次下载
    <b class='flag-5'>iSulad</b>云原生轻量级<b class='flag-5'>容器</b><b class='flag-5'>解决方案</b>

    openEuler开源项目iSulad加入 CNCF Landscape

    庞加莱实验室发起, 于2019年在 openEuler 社区开源。相比之前的容器引擎方案iSulad具备高性能、低开销、多场景支持等优点。为了更好地丰富云原生生态、以及打通开放原子基金会和 CNCF 基金会的联系,开放原子基金
    的头像 发表于 01-07 10:43 1196次阅读

    iSulad+Kuasar:管理面资源消耗锐减99%的新一代统一容器运行时解决方案

    容器引擎(Container Engine)主要负责容器运行环境的创建、容器资源的配置和容器生命周期的管理,北向接收来自于 Kubernetes 或前端命令行的输入,南向则调用底层
    的头像 发表于 04-27 15:00 712次阅读
    <b class='flag-5'>iSulad+Kuasar</b>:管理面资源消耗锐减99%的新一代统一<b class='flag-5'>容器</b>运行时<b class='flag-5'>解决方案</b>