默认情况下,docker容器运行时没有对硬件资源进行限制,这会导致容器占用全部的cpu等资源,一旦内核检测到没有足够的内存可以分配,就会抛出OOME(Out Of Memory Exception),并开始杀死一些进程用于释放内存空间,为了避免docker daemon被kill掉,docker通过调整daemon的OOM优先级来缓解,但容器的优先级并未被调整。资源不足以分配时,内核会对系统中所有的进程进行评估oom_score,得分越高则优先被kill掉,当然,我们也可以对一些重要的进程进行oom_adj调低,此外也可以定义策略,某个进程被kill后,根据策略自动重启该进程
一、容器的安全加固
1. 资源组的介绍
Linux Cgroups 的全称是 Linux Control Group,是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、 络带宽等等。对进程进行优先级设置、审计,以及将进程挂起和恢复等操作。
Linux Cgroups 给用户暴露出来的操作接口是文件系统,它以文件和目录的方式组织在操作系统的 /sys/fs/cgroup 路径下,执行此命令查看:mount -t cgroup在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也叫子系统。在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),该目录会复制父级系统中的配置文件。控制组下面的资源文件里填上什么值,就靠用户执行 docker run 时的参数指定
2. docker安全加固思路
保证镜像的安全:使用安全的基础镜像、删除镜像中的setuid和setgid权限、启用Docker的内容信任、最小安装原则、对镜像进行安全漏洞扫描,镜像安全扫描器:Clair、容器使用非root用户运行
保证容器的安全:对docker宿主机进行安全加固、限制容器之间的 络流量、配置Docker守护程序的TLS身份验证、启用用户命名空间支持(userns-remap)、限制容器的内存使用量、适当设置容器CPU优先级
二、cpu配额
1.观察现象
创建一个容器并运行,在容器中使用dd命令占用cpu的资源,使用【top】命令观察cpu的占用率,我们可以看到docker容器内运行的dd命令cpu利用率达到100%
经过cpu配额,我们可以看到cpu的利用率,限定在20%
三、限制memory
容器可用内存包括两个部分:物理内存和swap交换分区。
1. 实验环境清理,安装软件
2. 创建子系统目录,用来实验,不要直接在父级系统上直接更改
3. 对memory及swap进行限制,如果不限制swap分区,物理内存容量不够,会直接使用swap分区
swap分区大小与内存大小相等时,则没有可用的swap资源
4. 在用户端使用【dd】进行测试
四、限制磁盘io的操作次数
1. 查看磁盘设备名称及有关磁盘操作的文件
2. 创建容器并限制磁盘写入速度
通过对容器写入操作的限制,使用【dd】命令进行写操作会受到限制(时间变长)
五、隔离宿主机与容器
利用LXCFS增强docker容器隔离性和资源可见性
1. 观察现象
打开一个容器并运行,在容器中通过【free -m】命令查看内存使用,ctrl+p+q将容器进程打入后台,然后在宿主机中再次使用【free -m】查看,会发现容器中查看的数据和宿主机中查看的一致,则宿主机和容器没有完全的被隔离
2. 宿主机与docker的隔离
(1)安装软件
(2)初始化
初始化后,会自动在/var/lib/lxcfs目录中生成两个目录,如果没有则需要重新初始化
(3)将proc中的文件拷贝到容器中,并查看
设置隔离后,容器只能看到限制的物理内存大小和swap分区大小
六、设置特权级运行的容器
在某些情况下,我们也需要容器具备更多的权限,比如操作内核模块,控制swap交换分区,挂载USB磁盘,修改MAC地址等,下面让我们为容器添加权限
1. 观察现象
开启一个容器,通过【ip link set down eth0】命令关闭eth0,我们会发现即使容器内是以root身份运行,通过容器也无法对宿主机进行操作(权限不允许)
2. 为容器设置特权级
(1)开启容器并设置特权
(2)测试
七、设置容器白名单
–privileged=true 的权限非常大,接近于宿主机的权限,为了防止用户的滥用,需要增加限制,只提供给容器必须的权限。此时Docker 提供了权限白名单的机制,使用–cap-add添加必要的权限。
1. 运行容器,观察默认情况下,容器是否有名单限制
2. 设置容器白名单
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8595 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!