一种基于IP协议可选字段的容器公网带宽限制方法技术

技术编号:29138233 阅读:63 留言:0更新日期:2021-07-02 22:35
本发明专利技术公开了一种基于IP协议可选字段的容器公网带宽限制方法,通过在局域网的物理机上加载特定的内核模块,在容器将IP数据包发往局域网之前,将IP数据包的容器IP地址设置到IP协议的可选字段中。在局域网的公网网关机器上,通过加载特定内核模块,将IP数据包可选字段中的容器IP地址取出,并且对数据包打上相应的标签,交给带宽限制模块进行带宽控制。本发明专利技术在一台局域网网关机器上对局域网内所有容器的流量进行统一管理和限制,简化了软件架构,能提高管理效率,降低管理成本。并且,本发明专利技术能实现对多个跨物理机的容器公网带宽的联合管理和限制,对数据包的操作都在操作系统的内核态完成,具有很高的运行效率。

【技术实现步骤摘要】
一种基于IP协议可选字段的容器公网带宽限制方法
本专利技术涉及容器
,具体涉及一种基于IP协议可选字段的容器公网带宽限制方法。
技术介绍
容器是一种轻量级的计算虚拟化技术。通过使用容器技术,可以将应用程序和其运行所依赖标准库、第三方库、配置文件等运行环境打包到一个容器镜像中,后续应用程序的运行可以通过运行容器镜像的方式来替代。将应用程序打包成容器镜像再运行相比于直接运行应用程序具有隔离运行环境和物理资源的优点。由于容器间的运行环境和CPU、内存、网络等物理资源是互间隔离的,当同一台物理机上运行多个容器时,就不会造成运行环境管理混乱、互相争抢物理资源等情况。目前,容器已经成为互联网数据中心应用程序的主流部署方式。数据中心的多台物理机通常部署在同一个局域网内,物理机间的互相访问通过局域网IP地址进行,物理机访问公网通常会通过网关做NAT(NetworkAddressTranslation)将局域网IP地址转换为公网IP地址,网关是同一局域网中的一台具有公网IP地址的物理机。在网关机器上,通过对网关的所有流量数据包的局域网IP地址字段进行分析,就可以统计局域网内各物理机的公网流量,从而对物理机的流量进行限制。容器运行在物理机上,同一台物理机上可以运行多个容器,每个容器都拥有独立的IP地址。不同于物理机的IP地址,容器通常通过桥接的方式将网络接入到物理机的虚拟网桥中,因此容器的IP地址通常是物理机虚拟网桥的内部IP,容器内访问公网需要通过两层NAT,第一层是在容器所在的物理机上将容器的IP地址转换为物理机的局域网IP地址,第二层是在网关机器上将物理机的局域网IP地址转换为网关的公网IP地址。在做第一层转换后,容器的IP地址就丢失了,在网关的机器上只能确定数据包来源的物理机,无法确定数据包是来源于物理机上哪个容器。对容器公网带宽进行限制的方法通常是在容器所在的物理机上进行的。在做第一层NAT之前,通过对物理机虚拟网桥的流量数据包进行分析,可以根据数据包的源IP地址字段确定数据包的来源容器,从而实现对容器的公网带宽进行统计和限制。
技术实现思路
本专利技术提出了一种基于IP协议可选字段的容器公网带宽限制方法,能够实现在局域网网关机器上实现对局域网内任意物理机上容器的公网带宽进行限制。一种基于IP协议可选字段的容器公网带宽限制方法,包括以下步骤:1)在物理机架设第一Linux内核模块和第二Linux内核模块;2)物理机上加载第一Linux内核模块(Linux内核模块1),在收到容器对公网发送的数据包后,将容器的IP地址添加到数据包的IP头部options字段(可选字段)中;3)容器中发送的数据包通过物理机的第一层NAT(网络地址转换协议)之后,数据包的源IP地址被修改为物理机的局域网地址,并被发送到网关机器;4)网关机器加载第二Linux内核模块(即内核模块2),在收到步骤3)的数据包后,将数据包IP头部options字段中取出容器的IP地址,将数据包打上相应的标签;5)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包中的标签保存到数据包的连接中;6)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包连接中的标签保存到数据包中;7)通过TC(TrafficControl)对具有标签的数据包进行流量控制。本专利技术中,通过在局域网的物理机上加载内核模块(第一Linux内核模块和第二Linux内核模块),在容器将IP数据包发往局域网之前,将IP数据包的容器IP地址设置到IP协议的可选字段中。在局域网的公网网关机器上,通过加载特定内核模块,将IP数据包可选字段中的容器IP地址取出,并且对数据包打上相应的标签,交给带宽限制模块进行带宽控制。本专利技术在一台局域网网关机器上对局域网内所有容器的流量进行统一管理和限制,简化了软件架构,能提高管理效率,降低管理成本。并且,本专利技术能实现对多个跨物理机的容器公网带宽的联合管理和限制,对数据包的操作都在操作系统的内核态完成,具有很高的运行效率。步骤2)中,内核模块1在物理机启动后即被自动加载到Linux内核中。在内核模块1被加载时,会调用nf_register_hook函数将内核模块1中的钩子函数挂载到内核的netfilter链中;物理机上加载第一Linux内核模块具体包括:调用nf_register_hook函数将第一Linux内核模块中的钩子函数挂载到内核的netfilter链中。步骤2)中,物理机上所有的数据包都会被第一Linux内核模块注册在netfilter链中的钩子函数所捕获;步骤2)中,内核模块1的钩子函数通过调用setsockopt内核函数,将容器IP地址设置到IPPROTO_IP协议的IP_OPTIONS字段中,IPPROTO_IP和IP_OPTIONS为setsockopt函数的两个控制参数;将容器的IP地址添加到数据包的IP头部options字段(可选字段)中,具体包括:第一Linux内核模块的钩子函数通过调用setsockopt内核函数,将容器IP地址设置到IPPROTO_IP协议的IP_OPTIONS字段中,IPPROTO_IP和IP_OPTIONS为setsockopt函数的两个控制参数。IP_OPTIONS字段是指IP协议头部options字段。步骤3)中,容器传输到物理机作为第一层NAT(网络地址转换协议),物理机输到公网作为第二层NAT(网络地址转换协议);步骤4)中,内核模块2在网关机器启动后即被自动加载到Linux内核中。在内核模块2被加载时,会调用nf_register_hook函数将内核模块2中的钩子函数挂载到内核的netfilter链中。网关机器加载第二Linux内核模块,具体包括:会调用nf_register_hook函数将钩子函数挂载到内核的netfilter链中。步骤4)中,网关机器上所有的数据包都会被第二Linux内核模块(内核模块2)注册在netfilter链中的钩子函数所捕获;步骤4)中,将数据包IP头部options字段中取出容器的IP地址,具体包括:第二Linux内核模块的钩子函数通过调用getsockopt内核函数,从IPPROTO_IP协议的IP_OPTIONS字段中获取容器的IP地址,IPPROTO_IP和IP_OPTIONS为setsockopt函数的两个控制参数;IP_OPTIONS字段是指IP协议头部options字段。步骤4)中,将数据包打上相应的标签,具体包括:通过对数据包结构体(sk_buff类型)的mark字段赋值进行操作,数据包结构体传给第二Linux内核模块的钩子函数,标签值为容器IP地址的32位数值;对数据包打标签可以通过对数据包结构体(sk_buff类型)的mark字段赋值进行操作,数据包结构体由内核传给内核模块2的钩子函数,标签值可以为容器IP地址的32位数本文档来自技高网
...

【技术保护点】
1.一种基于IP协议可选字段的容器公网带宽限制方法,其特征在于,包括以下步骤:/n1)在物理机架设第一Linux内核模块和第二Linux内核模块;/n2)物理机上加载第一Linux内核模块,在收到容器对公网发送的数据包后,将容器的IP地址添加到数据包的IP头部options字段中;/n3)容器中发送的数据包通过物理机的第一层NAT之后,数据包的源IP地址被修改为物理机的局域网地址,并被发送到网关机器;/n4)网关机器加载第二Linux内核模块,在收到步骤3)的数据包后,将数据包IP头部options字段中取出容器的IP地址,将数据包打上相应的标签;/n5)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包中的标签保存到数据包的连接中;/n6)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包连接中的标签保存到数据包中;/n7)通过TC对具有标签的数据包进行流量控制。/n

【技术特征摘要】
1.一种基于IP协议可选字段的容器公网带宽限制方法,其特征在于,包括以下步骤:
1)在物理机架设第一Linux内核模块和第二Linux内核模块;
2)物理机上加载第一Linux内核模块,在收到容器对公网发送的数据包后,将容器的IP地址添加到数据包的IP头部options字段中;
3)容器中发送的数据包通过物理机的第一层NAT之后,数据包的源IP地址被修改为物理机的局域网地址,并被发送到网关机器;
4)网关机器加载第二Linux内核模块,在收到步骤3)的数据包后,将数据包IP头部options字段中取出容器的IP地址,将数据包打上相应的标签;
5)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包中的标签保存到数据包的连接中;
6)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包连接中的标签保存到数据包中;
7)通过TC对具有标签的数据包进行流量控制。


2.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤2)中,物理机上加载第一Linux内核模块具体包括:
调用nf_register_hook函数将第一Linux内核模块中的钩子函数挂载到内核的netfilter链中。


3.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤2)中,将容器的IP地址添加到数据包的IP头部options字段中,具体包括:
第一Linux内核模块的钩子函数通过调用setsockopt内核函数,将容器IP地址设置到IPPROTO_IP协议的IP_OPTIONS字段中,IPPROTO_IP和IP_...

【专利技术属性】
技术研发人员:叶靖
申请(专利权)人:杭州又拍云科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1