Kubernetes 最小化微服务漏洞 gVisor与Containerd集成

网友投稿 805 2022-11-30

Kubernetes 最小化微服务漏洞 gVisor与Containerd集成

Kubernetes 最小化微服务漏洞 gVisor与Containerd集成

已经测试过的应用和工具: ~]# systemctl stop dockerWarning: Stopping docker.service, but it can still be activated by: docker.socket[root@k8s-node1 ~]# pkill docker[root@k8s-node1 ~]# ps -ef | grep dockerroot 129602 126435 0 03:13 pts/0 00:00:00 grep --color=auto docker

1、准备配置

[root@k8s-node1 ~]# 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[root@k8s-node1 ~]# sysctl --system* Applying /usr/lib/sysctl.d/00-system.conf ..-.bridge.bridge-nf-call-ip6tables = 0net.bridge.bridge-nf-call-iptables = 0net.bridge.bridge-nf-call-arptables = 0* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...* Applying /usr/lib/sysctl.d/50-default.conf ...

2、安装

[root@k8s-node1 ~]# cd /etc/yum.repos.d[root@k8s-node1 yum.repos.d]# yum install -y containerd.io[root@k8s-node1 yum.repos.d]# wget 03:19:27-- mirrors.aliyun.com (mirrors.aliyun.com)... 115.223.27.223, 115.238.192.241, 115.238.192.242, ...Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|115.223.27.223|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 2081 (2.0K) [application/octet-stream]Saving to: ?.ocker-ce.repo.1?100%[===========================================================================================>] 2,081 --.-K/s in 0s 2021-07-15 03:19:28 (185 MB/s) - ?.ocker-ce.repo.1?.saved [2081/2081]#生成配置文件[root@k8s-node1 yum.repos.d]# cd /etc/containerd/[root@k8s-node1 containerd]# lsconfig.toml[root@k8s-node1 containerd]# containerd config default > config.toml

3、修改配置文件

• pause镜像地址(负责pod网络的镜像,需要修改地址,要不然-不了)

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

• Cgroup驱动改为systemd

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

• 增加runsc容器运行时

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc] runtime_type = "io.containerd.runsc.v1" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2" runtime_engine = "" runtime_root = ""

• 配置docker镜像加速器

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["containerd]# systemctl restart containerd[root@k8s-node1 containerd]# ps -ef | grep containerdroot 2887 1 1 03:41 ? 00:00:00 /usr/bin/containerd

4、配置kubelet使用containerd

这个文件是kubelet为用户提供扩展参数的一个地方,在这里可以加入扩展参数,kubelet就可以去使用了。

=--container-runtime=remote 指定容器运行时为远程,默认支持的是docker,在后续版本对docker支持启用 --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd

docker有docker的管理命令,containerd有它自己的管理命令,

containerd也有 ctr 管理工具,但功能比较简单,一般使用crictl工具检查和调试容器。

项目地址:> /etc/crictl.yaml << EOFruntime-endpoint: unix:///run/containerd/containerd.sockEOF

下面是docker与crictl命令对照表:

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

创建RuntimeClass:

apiVersion: node.k8s.io/v1 # RuntimeClass 定义于 node.k8s.io API 组kind: RuntimeClassmetadata: name: gvisor # 用来引用 RuntimeClass 的名字handler: runsc # 对应的 CRI 配置的名称root@k8s-master:~# kubectl apply -f cks_runtimeclass.yaml runtimeclass.node.k8s.io/gvisor createdroot@k8s-master:~# kubectl get runtimeclassNAME HANDLER AGEgvisor runsc 14s

现在已经完成了安全沙箱运行一个容器,在linux内核和容器之间做了隔离,但是这里有个问题,除了gvisor官网提供的哪些工具,可能有些工具是不能使用的。还有如果容器需要特权模式该怎么办呢?

gvisor是防止linux容器去直接调用内核的能力,特权模式是放开了对Linux内核的访问。所以gvisor是不允许特权模式的,使用了强隔离。如果有些容器使用了特权模式呢?

所以多容器运行时应用而生。RuntimeClass 是一个用于选择容器运行时配置的特性,容器运行时配置用于运行 Pod 中的容器。 通过runtimeclass可以配置不同容器引擎的容器运行时。让你pod在工作的时候,根据指定的容器运行时,让你的容器引擎选择去启动,来去满足不太同的需求。

如果有些容器需要使用特权模式可以使用runc,如果要使用沙箱机制那么就可以使用runsc。那么就可以指定rumtimeclass。所以可以根据你的需求使用不同的容器运行时。

所以企业使用的话是runc+runsc的组合。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes 最小化微服务漏洞 安全沙箱运行容器:gVisor介绍与安装
下一篇:Docker 理解进程(1):为什么我在容器中不能kill 1号进程?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~