Docker 容器与 swarm 集群实战——Docker 安全

一、容器资源控制

在server1上将环境恢复
[root@server1 ~]# docker rm vm1
vm1
Docker 容器与 swarm 集群实战——Docker 安全_第1张图片
Docker 容器与 swarm 集群实战——Docker 安全_第2张图片
在server2上一样的操作

1.在server1上运行容器(此时是root身份,但是并不是真正意义上的root)
Docker 容器与 swarm 集群实战——Docker 安全_第3张图片
解决:

Docker 容器与 swarm 集群实战——Docker 安全_第4张图片

[root@server1 ~]# docker run -it --name vm1 --privileged=true ubuntu

Docker 容器与 swarm 集群实战——Docker 安全_第5张图片
–privileged=true所设置的权限过大

2.白名单的设置
在这里插入图片描述

[root@server1 ~]# mount -t cgroup

Docker 容器与 swarm 集群实战——Docker 安全_第6张图片

Docker 容器与 swarm 集群实战——Docker 安全_第7张图片
测试:
[root@server1 cgroup]# docker run -it --name vm1 ubuntu
在这里插入图片描述

Docker 容器与 swarm 集群实战——Docker 安全_第8张图片

二、docker的安全遗留问题

1.查看cgroup子系统的层级路径
Docker 容器与 swarm 集群实战——Docker 安全_第9张图片
2.建立一个控制族群
首先进入cpu子系统对应的层级路径下:cd /sys/fs/cgroup/memory
通过新建文件夹创建一个memory控制族群:mkdir x1,即新建了一个memory控制族群:x1
新建x1之后,可以看到目录下自动建立了相关的文件,这些文件是伪文件。

[root@server1 x1]# pwd
/sys/fs/cgroup/memory/

Docker 容器与 swarm 集群实战——Docker 安全_第10张图片

查看内存
在这里插入图片描述

  • 限制mem

测试限制内存的使用
300M=30010241024
Docker 容器与 swarm 集群实战——Docker 安全_第11张图片

[root@server1 x1]# ll memory.limit_in_bytes 
-rw-r--r-- 1 root root 0 May 19 00:35 memory.limit_in_bytes
[root@server1 x1]# echo 314572800 > memory.limit_in_bytes 
[root@server1 x1]# cat memory.limit_in_bytes 
314572800

Docker 容器与 swarm 集群实战——Docker 安全_第12张图片
/dev/shm 内存使用点

截取400M,但是此时使用限制好像并没有生效
Docker 容器与 swarm 集群实战——Docker 安全_第13张图片
安装cgroup工具
在这里插入图片描述
Docker 容器与 swarm 集群实战——Docker 安全_第14张图片

[root@server1 shm]# yum install -y libcgroup-tools.x86_64

进行截取测试:

[root@server1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=400

Docker 容器与 swarm 集群实战——Docker 安全_第15张图片
注意:此时受到限制,超出300M限制后swap被时用了111M
在这里插入图片描述

  • 同时限制mem和swap
[root@server1 x1]# pwd
/sys/fs/cgroup/memory/x1
[root@server1 x1]# ll memory.memsw.limit_in_bytes 
-rw-r--r-- 1 root root 0 May 19 00:35 memory.memsw.limit_in_bytes
[root@server1 x1]# echo 314572800 > memory.memsw.limit_in_bytes 
[root@server1 x1]# cat memory.memsw.limit_in_bytes
314572800

Docker 容器与 swarm 集群实战——Docker 安全_第16张图片

注意:此时swap没有被使用

  • 设置虚拟机的内存
    Docker 容器与 swarm 集群实战——Docker 安全_第17张图片
    Docker 容器与 swarm 集群实战——Docker 安全_第18张图片
[root@server1 ~]# docker run -it --name vm1 --memory 314572800 --memory-swap 314572800 ubuntu

Docker 容器与 swarm 集群实战——Docker 安全_第19张图片

注意:此时已经设置过,但看到的却没有改变

查看cgroup里的配置信息
Docker 容器与 swarm 集群实战——Docker 安全_第20张图片
进入容器内查看
Docker 容器与 swarm 集群实战——Docker 安全_第21张图片
Docker 容器与 swarm 集群实战——Docker 安全_第22张图片

解决办法:

  • 安全加固

利用LXCFS增强docker容器的隔离性和资源的可见性

获取资源,安装lxcfs服务

[root@server1 ~]# yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm

打开服务,打入后台

[root@server1 ~]# lxcfs /var/lib/lxcfs/ &
[1] 4119
[root@server1 ~]# hierarchies:
  0: fd:   5: perf_event
  1: fd:   6: net_prio,net_cls
  2: fd:   7: blkio
  3: fd:   8: memory
  4: fd:   9: freezer
  5: fd:  10: cpuset
  6: fd:  11: pids
  7: fd:  12: cpuacct,cpu
  8: fd:  13: devices
  9: fd:  14: hugetlb
 10: fd:  15: name=systemd

Docker 容器与 swarm 集群实战——Docker 安全_第23张图片

[root@server1 proc]# docker run -it --name vm1 -m 314572800 --memory-swap 314572800 \
> -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
> -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
> -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
> -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
> -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
> -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
>  ubuntu

Docker 容器与 swarm 集群实战——Docker 安全_第24张图片

cpu 的限制

测试限制cpu的使用

我们的测试示例主要用到cpu.cfs_period_us和cpu.cfs_quota_us两个文件。
cpu.cfs_period_us:cpu分配的周期(微秒),默认为100000。
cpu.cfs_quota_us:表示该control group限制占用的时间(微秒),默认为-1,表示不限制。如果设为20000,表示占用20000/100000=20%的CPU。

Docker 容器与 swarm 集群实战——Docker 安全_第25张图片

建立一个CPU控制族群

首先进入cpu子系统对应的层级路径下:cd /sys/fs/cgroup/cpu
通过新建文件夹创建一个cpu控制族群:mkdir x2,即新建了一个cpu控制族群:x2
新建x2之后,可以看到目录下自动建立了相关的文件,这些文件是伪文件。
Docker 容器与 swarm 集群实战——Docker 安全_第26张图片

[root@server1 x2]# echo 100 > cpu.shares 
[root@server1 x2]# cat tasks 		#空

如何让控制cpu核数
Docker 容器与 swarm 集群实战——Docker 安全_第27张图片

[root@server1 cpu]# dd if=/dev/zero of=/dev/null &
[2] 4425

此时使用top查看
Docker 容器与 swarm 集群实战——Docker 安全_第28张图片

当再次进行截取
[root@server1 cpu]# dd if=/dev/zero of=/dev/null &
[3] 4429
[root@server1 cpu]# top

Docker 容器与 swarm 集群实战——Docker 安全_第29张图片

注意:此时两个任务会争抢cpu的资源

设置任务的队列

[root@server1 cpu]# cd x2/
[root@server1 x2]# echo 4425 > tasks #将id为4425的设置为等待任务
Docker 容器与 swarm 集群实战——Docker 安全_第30张图片
将截取的进程kill掉

Docker 容器与 swarm 集群实战——Docker 安全_第31张图片

[root@server1 ~]# docker run -it --name vm1 --cpu-period 100000 --cpu-quota 20000 ubuntu

此时cpu占用率20%

在这里插入图片描述

此时top查看

Docker 容器与 swarm 集群实战——Docker 安全_第32张图片

不关闭退出,查看配置文件
Docker 容器与 swarm 集群实战——Docker 安全_第33张图片

你可能感兴趣的:(企业)