一种高安全docker容器批量部署方法及装置与流程

文档序号:11276063阅读:450来源:国知局

本发明涉及docker容器的自动部署技术领域,特别涉及一种高安全docker容器批量部署方法及装置。



背景技术:

docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker核心解决的问题是利用lxc来实现类似vm的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同vm的方式不同,lxc其并不是一套硬件虚拟化方法-无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法,理解起来可能并不像vm那样直观。

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:

隔离性:每个用户实例之间相互隔离,互不影响。硬件虚拟化方法给出的方法是vm,lxc给出的方法是container,更细一点是kernelnamespace。

可配额/可度量:每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了cpu,memory可以方便实现,lxc则主要是利用cgroups来控制资源。

移动性:用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用aufs实现。

安全性:这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在kvm等虚拟机容器中翻译运行的,然而对于lxc,用户的进程是lxc-start进程的子进程,只是在kernel的namespace中隔离的,因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵,dotcloud是利用kernelgrsecpatch解决的。

目前,linux操作系统中,所有容器运行的是相同的强制访问控制类型(即selinux类型,如svirt_lxc_net_t),该类别允许所有网络端口都能处于监听状态,也允许所有网络端口都能对外发起连接。对于容器而言,例如,在一个容器中运行某个服务程序,一旦该服务程序被成功入侵,该服务程序进程将会连接任何网络端口并成为制造垃圾信息的机器人,也可能会通过网络攻击其他宿主机和容器,这便为容器留下了不可否认的安全问题。

docker容器的安全问题本质上就是容器技术的安全性问题,安全性问题90%以上可以归结为隔离性问题,docker容器的隔离性主要运用namespace技术。namespace技术是linux操作系统提供的一种内核级别环境隔离的方法,但是,虽然docker容器可通过namespace的方式分隔出看似是独立的空间,然而linux操作系统内核却不能通过namespace的方式分隔,所以即使docker容器具有多个独立的空间(container),但由于所有的linux操作系统调用其实都是通过主机的内核处理,所以最终还是会为docker容器留下安全隐患。



技术实现要素:

本发明针对docker容器部署过程中存在的安全隐患,以及在批量docker容器部署的效率低下的问题上,提出一种高安全docker容器批量部署方法及装置。

本发明提出一种高安全docker容器批量部署方法,包括:

步骤1,获取集群中每台物理机的cpu核数、cpu的利用率、内存使用率、带宽的使用率;

步骤2,根据所述cpu的利用率、所述内存使用率、所述带宽的使用率,为每台物理机计算权值,根据所述所述权值,计算需部署docker容器的个数;

步骤3,根据需部署docker容器的个数,并行创建docker容器。

所述步骤2中计算所述权值的公式为:

qi=(1-pi)+(1-mi)+(1-wi)

其中pi为所述cpu的利用率,mi为所述内存使用率,wi为所述带宽的使用率,i为第i个物理机。

所述步骤2中计算需部署docker容器的个数的公式为:

其中n为n个docker容器,qi为所述权值,i第i个物理机,i为物理机的总个数。

所述步骤3包括采用创建多进程的方式创建docker容器容器,其中进程的个数与相对应的物理机的所述cpu核数相同。

所述步骤3还包括为docker容器中的镜像定义强制访问控制策略;在docker容器创建时,将强制访问控制策略嵌入镜像中的元数据中。

本发明还提出一种高安全docker容器批量部署装置,包括:

获取信息模块,用于获取集群中每台物理机的cpu核数、cpu的利用率、内存使用率、带宽的使用率;

计算模块,用于根据所述cpu的利用率、所述内存使用率、所述带宽的使用率,为每台物理机计算权值,根据所述所述权值,计算需部署docker容器的个数;

部署模块,用于根据需部署docker容器的个数,并行创建docker容器。

所述计算模块中计算所述权值的公式为:

qi=(1-pi)+(1-mi)+(1-wi)

其中pi为所述cpu的利用率,mi为所述内存使用率,wi为所述带宽的使用率,i为第i个物理机。

所述计算模块中计算需部署docker容器的个数的公式为:

其中n为n个docker容器,qi为所述权值,i第i个物理机,i为物理机的总个数。

所述部署模块包括采用创建多进程的方式创建docker容器容器,其中进程的个数与相对应的物理机的所述cpu核数相同。

所述部署模块还包括为docker容器中的镜像定义强制访问控制策略;在docker容器创建时,将强制访问控制策略嵌入镜像中的元数据中。

由以上方案可知,本发明的优点在于:

本发明在需要批量部署docker容器的场景下,能够提升部署效率,减小部署时间,另外,本发明解决了docker容器的安全性问题,部署出的容器具有高安全性。

附图说明

图1是本发明流程图。

具体实施方式

本发明在现有docker容器创建方法的基础上,基于cpu核数和cpu利用率提升批量docker容器的部署效率,同时考虑到内存、网络因素,并且为创建的每个容器中的镜像定义强制访问控制策略,使开启docker容器中的进程时使用强制访问控制策略来加强docker容器的安全性。

如图1所示,为实现上述目的,本发明的一种高安全docker容器批量部署方法包括下列步骤:

a.获取集群物理机的cpu核数,其实现方法为:

a1.统计集群物理机的个数n;

a2.获取集群中每个物理的cpu的个数;

a3.获取每个物理cpu的核数;

a4.计算获取每台物理机的cpu的总的核数ci,其中总核数=物理cpu个数×每颗物理cpu的核数。

b.获取集群物理机的cpu的利用率,其实现方法为:

b1.获取参数user:从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含nice值为负进程;

b2.获取参数nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的cpu时间;

b3.获取参数system:从系统启动开始累计到当前时刻,处于核心态的运行时间;

b4.获取参数idle:从系统启动开始累计到当前时刻,除io等待时间以外的其它等待时间iowait从系统启动开始累计到当前时刻,io等待时间;

b5.利用公式计算cpu利用率:

p=100*(user+nice+system)/(user+nice+system+idle);计算出集群中每台物理机的cpu的利用率pi。

c.获取集群中每台物理机的内存使用情况:首先获取空闲内存量memfree,然后获取内存总量memtotal,利用公式计算内存使用率mi:

mi=1-memfree/memtotal

d.获取集群中每台物理机的网络使用情况:统计一段时间内receive和tramsmit的bytes数的变化,即可获得网口传输速率,再除以网口的带宽就得到带宽的使用率wi。

e.利用每台物理机的cpu利用率,内存使用率,带宽使用率,为每台物理机计算一个权值qi,其中i为第i个物理机;

qi=(1-pi)+(1-mi)+(1-wi)

f.若要批量部署创建n个docker容器,那么在集群中的各物理机上应该部署的docker容器的个数ni通过公式计算出来,其公式为:

由上述公式计算出集群中每台物理机需要创建的容器的个数ni。

g.根据f中得出的集群中每台物理机需要创建的容器的个数ni,并行的创建容器,采用创建多进程的方式创建所需创建的容器,进程的个数与该物理机的cpu的核数ci相同。

h.创建每个容器的过程如下:为docker容器中的镜像定义强制访问控制策略,以使开启docker容器中的进程时使用强制访问控制策略;在docker容器创建时,将强制访问控制策略嵌入镜像中的元数据中。该docker容器的创建方法能使进程中运行镜像时能使用该强制访问控制策略,从而避免了主机内核在不同的系统调用中运行docker容器中的进程时对docker容器的安全形成威胁,加强了docker容器的安全性;同时还简化了系统调用或访问docker容器中的进程时的强制访问控制过程。

下面更进一步描述本发明步骤,本发明的目标是提升批量创建docker容器的效率,创建出来的容器具有高安全性。详细实施步骤包含执行:a、获取集群物理机的cpu核数;b、获取集群物理机的cpu的利用率;c、计算各物理机需要创建容器的个数;d、并行创建高安全性容器。具体的一种实施方式如下:

a.获取集群物理机的cpu核数,其实现方法为:

a1.通过shell脚本统计集群物理机的个数n;

a2.通过shell脚本获取集群中每个物理的cpu的个数;

a3.通过shell脚本获取每个物理cpu的核数;

a4.计算获取每台物理机的cpu的总的核数ci,其中总核数=物理cpu个数×每颗物理cpu的核数。

b.获取集群物理机的cpu的利用率,其实现方法为:

b1.从linux系统/proc/stat文件中获取参数user:从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含nice值为负进程;

b2.从linux系统/proc/stat文件中获取参数nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的cpu时间;

b3.从linux系统/proc/stat文件中获取参数system:从系统启动开始累计到当前时刻,处于核心态的运行时间;

b4.从linux系统/proc/stat文件中获取参数idle:从系统启动开始累计到当前时刻,除io等待时间以外的其它等待时间iowait从系统启动开始累计到当前时刻,io等待时间;

b5.利用公式计算cpu利用率:

p=100*(user+nice+system)/(user+nice+system+idle);计算出集群中每台物理机的cpu的利用率pi。

c.获取集群中每台物理机的内存使用情况:首先获取空闲内存量memfree,然后获取内存总量memtotal。利用公式计算内存使用率mi:

mi=1-memfree/memtotal

d.获取集群中每台物理机的网络使用情况:统计一段时间内receive和tramsmit的bytes数的变化,即可获得网口传输速率,再除以网口的带宽就得到带宽的使用率wi。

e.利用每台物理机的cpu利用率,内存使用率,带宽使用率,为每台物理机计算一个权值qi:

qi=(1-pi)+(1-mi)+(1-wi)

f.若要批量部署创建n个docker容器,那么在集群中的各物理机上应该部署的docker容器的个数ni通过公式计算出来,其公式为:

由上述公式计算出集群中每台物理机需要创建的容器的个数ni;

g.并行创建高安全性容器。其实现方法如下:

g1.根据c中得出的集群中每台物理机需要创建的容器的个数ni,并行的创建容器,采用创建多线程的方式创建所需创建的容器。线程的个数与该物理机的cpu的核数ci相同。

g2.创建每个容器的过程如下:为docker容器中的镜像定义强制访问控制策略,以使开启docker容器中的进程时使用强制访问控制策略;在docker容器创建时,将强制访问控制策略嵌入镜像中的元数据中。该docker容器的创建方法能使进程中运行镜像时能使用该强制访问控制策略,从而避免了主机内核在不同的系统调用中运行docker容器中的进程时对docker容器的安全形成威胁,加强了docker容器的安全性;同时还简化了系统调用或访问docker容器中的进程时的强制访问控制过程。

本发明还提出一种高安全docker容器批量部署装置,包括:

获取信息模块,用于获取集群中每台物理机的cpu核数、cpu的利用率、内存使用率、带宽的使用率;

计算模块,用于根据所述cpu的利用率、所述内存使用率、所述带宽的使用率,为每台物理机计算权值,根据所述所述权值,计算需部署docker容器的个数;

部署模块,用于根据需部署docker容器的个数,并行创建docker容器。

所述计算模块中计算所述权值的公式为:

qi=(1-pi)+(1-mi)+(1-wi)

其中pi为所述cpu的利用率,mi为所述内存使用率,wi为所述带宽的使用率,i为第i个物理机。

所述计算模块中计算需部署docker容器的个数的公式为:

其中n为n个docker容器,qi为所述权值,i第i个物理机,i为物理机的总个数。

所述部署模块包括采用创建多进程的方式创建docker容器容器,其中进程的个数与相对应的物理机的所述cpu核数相同。

所述部署模块还包括为docker容器中的镜像定义强制访问控制策略;在docker容器创建时,将强制访问控制策略嵌入镜像中的元数据中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1