Docker 容器與 swarm 集羣實戰——Docker 安全

一、容器資源控制

在server1上將環境恢復
[root@server1 ~]# docker rm vm1
vm1
在這裏插入圖片描述
在這裏插入圖片描述
在server2上一樣的操作

1.在server1上運行容器(此時是root身份,但是並不是真正意義上的root)
在這裏插入圖片描述
解決:

在這裏插入圖片描述

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

在這裏插入圖片描述
–privileged=true所設置的權限過大

2.白名單的設置
在這裏插入圖片描述

[root@server1 ~]# mount -t cgroup

在這裏插入圖片描述

在這裏插入圖片描述
測試:
[root@server1 cgroup]# docker run -it --name vm1 ubuntu
在這裏插入圖片描述

在這裏插入圖片描述

二、docker的安全遺留問題

1.查看cgroup子系統的層級路徑
在這裏插入圖片描述
2.建立一個控制族羣
首先進入cpu子系統對應的層級路徑下:cd /sys/fs/cgroup/memory
通過新建文件夾創建一個memory控制族羣:mkdir x1,即新建了一個memory控制族羣:x1
新建x1之後,可以看到目錄下自動建立了相關的文件,這些文件是僞文件。

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

在這裏插入圖片描述

查看內存
在這裏插入圖片描述

  • 限制mem

測試限制內存的使用
300M=30010241024
在這裏插入圖片描述

[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

在這裏插入圖片描述
/dev/shm 內存使用點

截取400M,但是此時使用限制好像並沒有生效
在這裏插入圖片描述
安裝cgroup工具
在這裏插入圖片描述
在這裏插入圖片描述

[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

在這裏插入圖片描述
注意:此時受到限制,超出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

在這裏插入圖片描述

注意:此時swap沒有被使用

  • 設置虛擬機的內存
    在這裏插入圖片描述
    在這裏插入圖片描述
[root@server1 ~]# docker run -it --name vm1 --memory 314572800 --memory-swap 314572800 ubuntu

在這裏插入圖片描述

注意:此時已經設置過,但看到的卻沒有改變

查看cgroup裏的配置信息
在這裏插入圖片描述
進入容器內查看
在這裏插入圖片描述
在這裏插入圖片描述

解決辦法:

  • 安全加固

利用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

在這裏插入圖片描述

[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

在這裏插入圖片描述

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。

在這裏插入圖片描述

建立一個CPU控制族羣

首先進入cpu子系統對應的層級路徑下:cd /sys/fs/cgroup/cpu
通過新建文件夾創建一個cpu控制族羣:mkdir x2,即新建了一個cpu控制族羣:x2
新建x2之後,可以看到目錄下自動建立了相關的文件,這些文件是僞文件。
在這裏插入圖片描述

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

如何讓控制cpu核數
在這裏插入圖片描述

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

此時使用top查看
在這裏插入圖片描述

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

在這裏插入圖片描述

注意:此時兩個任務會爭搶cpu的資源

設置任務的隊列

[root@server1 cpu]# cd x2/
[root@server1 x2]# echo 4425 > tasks #將id爲4425的設置爲等待任務
在這裏插入圖片描述
將截取的進程kill掉

在這裏插入圖片描述

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

此時cpu佔用率20%

在這裏插入圖片描述

此時top查看

在這裏插入圖片描述

不關閉退出,查看配置文件
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章