一种自动化配置Docker容器访问控制的方法与流程

文档序号:11156530阅读:761来源:国知局
本发明涉及计算机软件应用
技术领域
:,具体涉及一种自动化配置Docker容器访问控制的方法,一种基于LinuxIptables和Ipset自动化配置Docker容器访问控制的方法,保证Docker容器与外部网络的相互访问可以灵活和安全的进行控制。
背景技术
::Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker创建容器时可以使用同主机的本地网络,默认外部网络都可以进行访问,因此Docker创建容器时可以使用同主机的本地网络,使得外部网络与Docker容器可以方便地进行相互访问。但对于某些应用场景,出于安全起见,我们并不希望所有的Docker容器对外暴露端口和服务,因此需要对Docker容器增加访问控制的设置。因此我们需要一种既能满足网络访问和适用场景多样性,又能配置简单和灵活控制的Docker容器访问控制方法。Iptables是Linux内核集成的IP信息包过滤系统,我们使用的Filter表用于实现对转发包的控制,其中的三个链INPUT、FORWARD、OUTPUT分别处理对应类型的数据包,通过在对应的链上设置规则最终对数据包进行控制。INPUT用于保护主机,FORWARD用于保护后端服务器,OUTPUT用于限制本机服务的网络访问。Ipset是Iptables的扩展,允许创建匹配整个地址集合的规则,而不像传统的Iptables链是线性的存储和过滤。IP集合存储在带索引的数据结构中,这种结构即使集合比较大也可以进行高效的查找。技术实现要素:本发明要解决的技术问题是:本发明针对以上问题,提供一种自动化配置Docker容器访问控制的方法。本发明所采用的技术方案为:一种自动化配置Docker容器访问控制的方法,所述方法在Docker环境初始化网络过程中设定Iptables内核参数和filter过滤表的基本链,在创建Docker容器时,通过主机上对应该容器的端口绑定下发的安全组,从而指定安全组;所述安全组中的规则能事先配置和后期修改,并支持TCP、UDP、ICMP协议和端口以及远程网络CIDR和安全组的设置,最终转化为Iptables规则;删除Docker容器时会自动清除自身的Iptables规则,从而不影响其他的容器访问和服务使用。通过安全组规则的事先配置、动态增加、删除或修改,容器的外部对内访问和内部对外访问能够实时响应,从而更加灵活和安全的调用Docker容器和访问服务。Iptables是Linux内核集成的IP信息包过滤系统,我们使用的Filter过滤表用于实现对转发包的控制,其中的三个链INPUT、FORWARD、OUTPUT分别处理对应类型的数据包,通过在对应的链上设置规则最终对数据包进行控制。INPUT用于保护主机,FORWARD用于保护后端服务器,OUTPUT用于限制本机服务的网络访问。Ipset是Iptables的扩展,允许创建匹配整个地址集合的规则,而不像传统的Iptables链是线性的存储和过滤。IP集合存储在带索引的数据结构中,这种结构即使集合比较大也可以进行高效的查找。所述方法实现步骤如下:A:主机首先搭建好Docker环境,然后客户端调用脚本初始化网桥br0连接到主机网卡eth1上,同时设定Iptables内核参数和filter过滤表的基本链;B:创建Docker容器时下发安全组名和预设规则,filter过滤表的基本链通过容器对应到主机的veth网卡,从而跳转到容器自身的链中进行绑定,通过预先设定的规则在自身的链中进行相应设置;同时创建同安全组名的Ipset集合并把容器的IP加入到该集合的成员列表中;C:Docker容器运行时,如果想增加、删除和修改Iptables规则,需要在Docker容器使用的安全组中进行相应设置;重启Docker容器再次运行申请IP和创建Iptables规则的过程,此时新设置的Iptables规则会及时的生效;D:删除Docker容器时,自动清除自身的Iptables规则和链,并与filter过滤表的基本链解除关联;同时把容器的Ip从Ipset集合的成员列表中删除。所述方法环境基于CentOSrelease7操作系统搭建1.11.2版本的Dockerswarm集群环境,服务端编程基于Go语言的Beego框架实现,客户端基于Python语言接收RESTfulURL形式的参数,脚本基于Shell语言实现。所述方法基于的LinuxIptables版本为1.4.21-13.el7,初始化网络过程中设定Iptables内核参数和filter表的基本链,创建Docker容器时指定安全组名,对其设定指定的Iptables规则并添加到原生的filter表的基本链中,可有效限制外部对内和内部访问限制;删除Docker容器时会删除对应的Iptables规则。所述方法基于的LinuxIpset版本为6.19-4.el7,创建Docker容器时指定安全组名,创建同名的Ipset集合并把容器IP加入到该集合中;后续创建的其他使用该安全组的Docker容器都加入到该集合中,Iptables规则直接在Ipset集合上设定,减少了大量重复冗余的Iptables规则,从而大大减少了系统资源占用。本发明的有益效果为:本发明基于LinuxIptables和Ipset自动化配置Docker容器访问控制,支持规则事先定义和动态增加、删除和修改的方式,填补Docker容器使用同主机的本地网络没有访问控制的空白。服务端和客户端通过RESTfulURL方式通信,这样可以帮助开发人在良好的网络规划下更加灵活和安全的使用Docker容器,同时有效的进行Docker容器的服务隔离。本发明沿用OpenStack虚拟机安全组的概念,借助原生的LinuxIptables和Ipset实现自动化配置Docker容器访问控制,根据自身需要灵活定义哪些网络哪些主机可以访问Docker容器,并且可以限制Docker容器对外可以访问哪些网络哪些主机。通过集成在生产环境下服务端的Docker容器管理工程和客户端的Docker容器监控工程中,所有Docker容器通过安全组进行访问控制规则的设定,从而完成Docker容器外部对内和内部对外的访问控制。附图说明图1为Docker容器所在的主机网络;图2为Docker容器Iptables链整理逻辑。具体实施方式下面结合具体实施方式对本发明进一步说明:实施例1:一种自动化配置Docker容器访问控制的方法,所述方法在Docker环境初始化网络过程中设定Iptables内核参数和filter过滤表的基本链,在创建Docker容器时,通过主机上对应该容器的端口绑定下发的安全组,从而指定安全组;所述安全组中的规则能事先配置和后期修改,并支持TCP、UDP、ICMP协议和端口以及远程网络CIDR和安全组的设置,最终转化为Iptables规则;删除Docker容器时会自动清除自身的Iptables规则,从而不影响其他的容器访问和服务使用。通过安全组规则的事先配置、动态增加、删除或修改,容器的外部对内访问和内部对外访问能够实时响应,从而更加灵活和安全的调用Docker容器和访问服务。实施例2如图1、2所示,在实施例1的基础上,本实施例所述方法实现步骤如下:A:主机首先搭建好Docker环境,然后客户端调用脚本初始化网桥br0连接到主机网卡eth1上,同时设定Iptables内核参数和filter过滤表的基本链;B:创建Docker容器时下发安全组名和预设规则,filter过滤表的基本链通过容器对应到主机的veth网卡,从而跳转到容器自身的链中进行绑定,通过预先设定的规则在自身的链中进行相应设置;同时创建同安全组名的Ipset集合并把容器的IP加入到该集合的成员列表中;C:Docker容器运行时,如果想增加、删除和修改Iptables规则,需要在Docker容器使用的安全组中进行相应设置;重启Docker容器再次运行申请IP和创建Iptables规则的过程,此时新设置的Iptables规则会及时的生效;D:删除Docker容器时,自动清除自身的Iptables规则和链,并与filter过滤表的基本链解除关联;同时把容器的Ip从Ipset集合的成员列表中删除。Iptables是Linux内核集成的IP信息包过滤系统,我们使用的Filter过滤表用于实现对转发包的控制,其中的三个链INPUT、FORWARD、OUTPUT分别处理对应类型的数据包,通过在对应的链上设置规则最终对数据包进行控制。INPUT用于保护主机,FORWARD用于保护后端服务器,OUTPUT用于限制本机服务的网络访问。Ipset是Iptables的扩展,允许创建匹配整个地址集合的规则,而不像传统的Iptables链是线性的存储和过滤。IP集合存储在带索引的数据结构中,这种结构即使集合比较大也可以进行高效的查找。实施例3在实施例2的基础上,本实施例所述方法环境基于CentOSrelease7操作系统搭建1.11.2版本的Dockerswarm集群环境,服务端编程基于Go语言的Beego框架实现,客户端基于Python语言接收RESTfulURL形式的参数,脚本基于Shell语言实现。实施例4在实施例3的基础上,本实施例所述方法基于的LinuxIptables版本为1.4.21-13.el7,初始化网络过程中设定Iptables内核参数和filter表的基本链,创建Docker容器时指定安全组名,对其设定指定的Iptables规则并添加到原生的filter表的基本链中,可有效限制外部对内和内部访问限制;删除Docker容器时会删除对应的Iptables规则。实施例5在实施例4的基础上,本实施例所述方法基于的LinuxIpset版本为6.19-4.el7,创建Docker容器时指定安全组名,创建同名的Ipset集合并把容器IP加入到该集合中;后续创建的其他使用该安全组的Docker容器都加入到该集合中,Iptables规则直接在Ipset集合上设定,减少了大量重复冗余的Iptables规则,从而大大减少了系统资源占用。实施方式仅用于说明本发明,而并非对本发明的限制,有关
技术领域
:的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1