kubernetes--安全沙箱运行容器gVisor

这篇具有很好参考价值的文章主要介绍了kubernetes--安全沙箱运行容器gVisor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

gVisor介绍

gvisor,kubenetes,kubernetes,docker,容器

 文章来源地址https://www.toymoban.com/news/detail-596357.html

       所知,容器的应用程序可以直接访问Linux内核的系统调用,容器在安全隔离上还是比较弱,虽然内核在不断的增强自身的安全特性,但由于内核自身代码极端复杂,CVE漏洞层出不穷。

       所以要想减少这方面安全风险,就是做好安全隔离,阻断容器内程序对物理机内核的依赖。

Google开源的一种gVisor容器沙箱技术就是采用这种思路,gVisor隔离容器和内核之间访问,提供了大部分内核的系统调用,巧妙的将容器内进程的系统调用转为给gViosr的访问。

       gVisor兼容OCI,与Docker和K8s无缝集成,很方便使用

容器中的OCI指的是Open Container Initiative即开放容器计划

gvisor,kubenetes,kubernetes,docker,容器

项目地址:https://github.com/goole/gvisor

和其他安全防范措施对比:

       seccomp:系统调用过滤

       app armor:限制容器里进程访问文件系统,网络等权限

       capability:限制容器进程拥有的访问内核能力(逻辑上对系统调用做了一个分组)

       非root用户运行容器,减少容器进程拥有的能力

防止容器进程拥有大权限,但只是一定程度,无法避免容器中的进程访问linux内核,而gVisor是在容器和内核之间。避免了容器之间访问内核

gvisor,kubenetes,kubernetes,docker,容器

缺点:增加对系统调用时间,和开销。但技术相对成熟,消耗不大。阿里云部分产品已加入容器沙箱机制

gVisor架构:

gvisor,kubenetes,kubernetes,docker,容器

 

gVisor由3个组件构成:

       Runsc是一种Runtime引擎,负责容器的创建与销毁

       Sentry负责容器内程序的系统调用处理

       Gofer负责文件系统的操作代理,IO请求都会由他转接到HOST上

gVisor与Docker集成:

gVisor内核要求:Linux 3.17+

如果用的是CentOS7则需要升级内核,Ubuntu不需要。

CentOS7内核升级步骤(一个节点也行):

【】rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

【】rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

【】yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml –y

【】awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg  #查看可用内核

【】grub2-set-default 0

【】reboot

【】uname -r

https://blog.csdn.net/inthat/article/details/117074180

Centos 7 rpm升级到指定内核

rpm 去

https://pkgs.org/download/kernel(list_del) 找 kernel-xxx.rpm

https://pkgs.org/download/kernel-devel 找 kernel-devel-xxxx.rpm

yum -y install kernel-3.10.0-1160.el7.x86_64 kernel-devel-3.10.0-1160.el7.x86_64  && grub2-set-default 0 && reboot

下载指定版本用rpm -Uvh安装或者用yum安装

1.准备二进制文件

【】sha512sum -c runsc.sha512

【】rm -f *.sha512

【】chmod a+rx runsc containerd-shim-runsc-v1
【】mv runsc containerd-shim-runsc-v1 /usr/local/bin

2、Docker配置使用gVisor

【】runsc install

# 查看加的配置/etc/docker/daemon.json

gvisor,kubenetes,kubernetes,docker,容器

 

【】systemctl restart docker

参考文档:https://gvisor.dev/docs/user_guide/install/

gvisor,kubenetes,kubernetes,docker,容器

gvisor,kubenetes,kubernetes,docker,容器

 

使用runsc运行容器:

【】docker run -d --runtime=runsc  nginx

使用dmesg验证

docker run  --runtime=runsc  -it  nginx dmesg

gvisor,kubenetes,kubernetes,docker,容器

进入容器与不指定runtime的容器对比,观察内核,发现vgisor会使用沙箱的独立内核

 gvisor,kubenetes,kubernetes,docker,容器

已经测试过的应用和工具:https://gvisor.dev/docs/user_guide/compatibility/

 gVisor与Containerd集成:

1、准备配置(装docker时已经启用)

【】cat > /etc/sysctl.d/99-kubernetes-cri.conf << EOF

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

EOF

【】sysctl -system

2、安装

【】cd /etc/yum.repos.d

【】wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

【】yum install -y containerd.io  #此处执行这一条就行前面的都配置好了

装好之后停掉docker只用containerd做容器运行时

3、修改配置文件

• pause镜像地址

• Cgroup驱动改为systemd

 • 增加runsc容器运行时

 • 配置docker镜像加速器

3、修改配置文件

#创建配置文件并修改

https://gvisor.dev/docs/user_guide/containerd/quick_start/

【】mkdir -p /etc/containerd

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

vi /etc/containerd/config.toml

...

[plugins."io.containerd.grpc.v1.cri"]

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"

...

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

SystemdCgroup = true

...

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

runtime_type = "io.containerd.runsc.v1"

gvisor,kubenetes,kubernetes,docker,容器

 

#runtime类型,增加了runsc是gVios

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]

...

【】systemctl  stop  docker

【】systemctl stop docker.socket

【】systemctl restart containerd

4、配置kubelet使用containerd

【】vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd

上面的配置中我们增加了两个参数,--container-runtime 参数是用来指定使用的容器运行时的,可选值为 docker 或者 remote,默认是 docker,由于我们这里使用的是 containerd 这种容器运行时,所以配置为 remote 值(也就是除 docker 之外的容器运行时都应该指定为 remote),然后第二个参数 --container-runtime-endpoint 是用来指定远程的运行时服务的 endpiont 地址的,在 Linux 系统中一般都是使用 unix 套接字的形式,比如这里我们就是指定连接 containerd 的套接字地址

【】systemctl restart kubelet

5、验证

kubectl get node -o wide

 gvisor,kubenetes,kubernetes,docker,容器

 #注意之前docker创建的容器containerd无法使用会导致该节点上的pod异常,会重新调度,并下载镜像。非平滑切换

gvisor,kubenetes,kubernetes,docker,容器

  K8s使用gVisor运行容器:

gvisor与containerd比docker集成更好,K8S目前没有适配docker的gvisor

       RuntimeClass是一个用于选择容器运行时配置的特性,容器运行时配置用于运行Pod中的容器。

创建RuntimeClass:

gvisor,kubenetes,kubernetes,docker,容器

创建pod:

 gvisor,kubenetes,kubernetes,docker,容器

 

依次应用

kubectl get pod nginx-gvisor -o wide

kubectl exec nginx-gvisor -- dmesg

gvisor,kubenetes,kubernetes,docker,容器

 

到了这里,关于kubernetes--安全沙箱运行容器gVisor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈

    Rancher是一个开源软件平台,使组织能够在生产中运行和管理Docker和Kubernetes。使用Rancher,组织不再需要使用一套独特的开源技术从头开始构建容器服务平台。Rancher提供了管理生产中的容器所需的整个软件堆栈。 Rancher是供采用容器的团队使用的完整软件堆栈。它解决了在任何

    2024年02月13日
    浏览(62)
  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(66)
  • 瀚高数据库 docker 容器单机运行(安全版v4.5.9)

    瀚高数据库 docker 容器单机运行 鉴于有些高端客户需要容器运行瀚高数据库,本文主要针对这些用户说明一下瀚高数据库镜像的操作。 文档所使用的docker版本是 18.03.0 。 已拿到docker镜像包 459.tar ,如有需要可以拨打热线电话 400-708-8006 。 注意: 容器内已经初始化好数据库实

    2024年01月16日
    浏览(55)
  • 如何安全的清理/var 下的docker临时文件,在不停用docker正在运行的容器情况下

    在不停止正在运行的 Docker 容器的情况下清理 `/var` 目录下的临时文件有一定的风险,因为这可能导致正在运行的容器出现问题。然而,你可以尝试以下方法来减小对正在运行的容器的影响: 1. 删除悬空镜像: 悬空镜像是没有与任何容器关联的镜像。你可以运行以下命令来删

    2024年02月09日
    浏览(59)
  • 云原生Kubernetes:CRI 容器运行时接口

    目录 一、理论 1.​CRI 2.容器运行时层级 3.容器运行时比较 二、总结 (1)概念       Kubernetes Node (kubelet) 的主要功能就是启动和停止容器的组件,我们 称之为容器运行时( Container Runtime) ,其中最知名的就是 Docker 。为了 更具扩展性, Kubernetes 1.5 版本开始就加入了容器运行

    2024年02月09日
    浏览(42)
  • 热门的容器技术:Docker 和 Kubernetes 介绍

    目录 一、什么是容器技术 二、Docker 介绍 三、Kubernetes介绍 四、Docker 和 Kubernetes的区别 容器技术指的是一种操作系统级的虚拟化技术,用于将应用程序及其依赖项打包成一个独立的、可移植的运行环境,称为容器。容器技术通过隔离应用程序之间的运行环境,使得每个容器在

    2024年02月03日
    浏览(47)
  • kubernetes和容器安全的7个关键特性

    Uptycs结合了针对Kubernetes和容器运行时的威胁检测,自动注册表扫描和Kubernetes硬化检查。 许多组织正在开始他们的Kubernetes和容器之旅,而其他组织在扩展部署规模时遇到了复杂性问题。容器化应用程序带来了许多好处,但也引入了新类型的安全挑战。 Uptycs通过将威胁、漏洞

    2024年02月09日
    浏览(35)
  • 从swarm到kubernetes Docker容器云实践

    kubernetes 与swarm 比较 优点 复制集与健康维护 服务自发现与负载均衡 灰度升级 垃圾回收 自动回收失效镜像与容器 与容器引擎解耦 不仅仅支持docker容器 用户认证与资源隔离 缺点 大而全意味着 复杂度较高 从部署到使用都比swarm 复杂的多 相对而已swarm比较轻量级 而且跟docke

    2024年02月19日
    浏览(41)
  • Docker和Kubernetes:构建现代应用容器编排系统

    作者:禅与计算机程序设计艺术 Docker是一个开源的应用容器引擎,可以轻松打包、部署及运行应用程序。Kubernetes(简称K8s)是一个开源的,用于管理云平台中多个主机上的容器化的应用的容器集群管理系统。通过对Docker和Kubernetes的结合,能够更高效地自动化地部署和管理容

    2024年02月07日
    浏览(41)
  • Kubernetes配置 Pods 和容器—将 Docker Compose 文件转换为 Kubernetes 资源

    你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 我们有很多种方式安装 Kompose。首选方式是从最新的 GitHub 发布页面下载二进制文件。 Kompose 通过 GitHub 安装 只需几步,

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包