CN113067719B - 一种基于ip协议可选字段的容器公网带宽限制方法 - Google Patents
一种基于ip协议可选字段的容器公网带宽限制方法 Download PDFInfo
- Publication number
- CN113067719B CN113067719B CN202110178017.6A CN202110178017A CN113067719B CN 113067719 B CN113067719 B CN 113067719B CN 202110178017 A CN202110178017 A CN 202110178017A CN 113067719 B CN113067719 B CN 113067719B
- Authority
- CN
- China
- Prior art keywords
- container
- data packet
- address
- public network
- kernel module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0896—Bandwidth or capacity management, i.e. automatically increasing or decreasing capacities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/31—Flow control; Congestion control by tagging of packets, e.g. using discard eligibility [DE] bits
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于IP协议可选字段的容器公网带宽限制方法,通过在局域网的物理机上加载特定的内核模块,在容器将IP数据包发往局域网之前,将IP数据包的容器IP地址设置到IP协议的可选字段中。在局域网的公网网关机器上,通过加载特定内核模块,将IP数据包可选字段中的容器IP地址取出,并且对数据包打上相应的标签,交给带宽限制模块进行带宽控制。本发明在一台局域网网关机器上对局域网内所有容器的流量进行统一管理和限制,简化了软件架构,能提高管理效率,降低管理成本。并且,本发明能实现对多个跨物理机的容器公网带宽的联合管理和限制,对数据包的操作都在操作系统的内核态完成,具有很高的运行效率。
Description
技术领域
本发明涉及容器技术领域,具体涉及一种基于IP协议可选字段的容器公网带宽限制方法。
背景技术
容器是一种轻量级的计算虚拟化技术。通过使用容器技术,可以将应用程序和其运行所依赖标准库、第三方库、配置文件等运行环境打包到一个容器镜像中,后续应用程序的运行可以通过运行容器镜像的方式来替代。将应用程序打包成容器镜像再运行相比于直接运行应用程序具有隔离运行环境和物理资源的优点。由于容器间的运行环境和CPU、内存、网络等物理资源是互间隔离的,当同一台物理机上运行多个容器时,就不会造成运行环境管理混乱、互相争抢物理资源等情况。目前,容器已经成为互联网数据中心应用程序的主流部署方式。
数据中心的多台物理机通常部署在同一个局域网内,物理机间的互相访问通过局域网IP地址进行,物理机访问公网通常会通过网关做NAT(Network Address Translation)将局域网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(Traffic Control)对具有标签的数据包进行流量控制。
本发明中,通过在局域网的物理机上加载内核模块(第一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位数值;
步骤5)中,iptables是Linux中常用的数据包管理工具,可以实现对数据包的修改、打标签、转发、统计等功能;
步骤5)中,mangle表是iptables工具保存对数据包修改规则的表,通常在这张表中对数据包进行修改和打标签。INPUT链是数据包进入内核TCP/IP协议栈的入口。
步骤5)中,将数据包中的标签保存到数据包连接中可以通过iptables的connmark模块来完成,命令为:iptables-t mangle-A INPUT-j CONNMARK--save-mark;
步骤6)中,将数据包连接中的标签保存到数据包中可以通过iptables的connmark模块来完成,命令为:iptables-t mangle-A INPUT-j CONNMARK--restore-mark;
步骤7)中,TC是Linux系统中常用的网络流量限制工具,可以根据数据包的标签对带有相同标签的流量进行限速;
具有标签的数据包即标记为i的数据包的带宽Bi可以通过以下公式进行计算:
Q为网关的最大物理带宽值,B为所有标记的数据包的带宽期望值总和,bi为标记为i的数据包的带宽期望值。
与现有技术相比,本发明具有如下优点:
1)本发明在一台局域网网关机器上对局域网内所有容器的流量进行统一管理和限制,现有方案需要在所有局域网物理机中进行容器流量的管理,本发明简化了软件架构,能提高管理效率,降低管理成本;并且,本发明能实现对多个跨物理机的容器公网带宽的联合管理和限制,对数据包的操作都在操作系统的内核态完成,具有很高的运行效率。
2)本发明可以实现对多个跨物理机的容器公网带宽的联合管理和限制,现有方案则无法实现该功能;
3)本发明能提升容器带宽规则变更时的更新速度,本发明只需要更新网关机器上的规则即可,现有方案需要更新每一台物理机上的规则;
4)本发明对数据包的修改和带宽的限制均在操作系统的内核模块中进行,具有很高的运行性能。
附图说明
图1为本发明基于IP协议可选字段的容器公网带宽限制方法的流程示意图。
具体实施方式
如图1所示,一种基于IP协议可选字段的容器公网带宽限制方法,包括以下步骤:
1)物理机上加载Linux内核模块1,在收到容器对公网发送的数据包后,将容器的IP地址添加到数据包IP头部的options字段中;
2)容器中发送的数据包通过物理机的第一层NAT之后,数据包的源IP地址被修改为物理机的局域网地址,并被发送到网关机器;
3)网关机器加载内核模块2,在收到数据包后,将数据包IP头部的options字段中取出容器的IP地址,将数据包打上相应的标签;
4)网关机器通过添加iptables规则,在mangle表的INPUT链中将数据包中的标签保存到连接中;
5)网关机器通过添加iptables规则,在mangle表的INPUT链中将连接中的标签保存到数据包中;
6)通过TC(Traffic Control)对具有标签的数据包进行流量控制。
步骤1)中,内核模块1在物理机启动后即被自动加载到Linux内核中。在内核模块1被加载时,会调用nf_register_hook函数将内核模块1中的钩子函数挂载到内核的netfilter链中;
步骤1)中,物理机上所有的数据包都会被内核模块1注册在netfilter链中的钩子函数所捕获;
步骤1)中,内核模块1的钩子函数通过调用setsockopt内核函数,将容器IP地址设置到IPPROTO_IP协议的IP_OPTIONS字段中,IPPROTO_IP和IP_OPTIONS为setsockopt函数的两个控制参数;
步骤3)中,内核模块2在网关机器启动后即被自动加载到Linux内核中。在内核模块2被加载时,会调用nf_register_hook函数将内核模块2中的钩子函数挂载到内核的netfilter链中;
步骤3)中,网关机器上所有的数据包都会被内核模块2注册在netfilter链中的钩子函数所捕获;
步骤3)中,内核模块2的钩子函数通过调用getsockopt内核函数,从IPPROTO_IP协议的IP_OPTIONS字段中获取容器的IP地址,IPPROTO_IP和IP_OPTIONS为setsockopt函数的两个控制参数;
步骤3)中,对数据包打标签可以通过对数据包结构体(sk_buff类型)的mark字段赋值进行操作,数据包结构体由内核传给内核模块2的钩子函数,标签值可以为容器IP地址的32位数值;
步骤4)中,iptables是Linux中常用的数据包管理工具,可以实现对数据包的修改、打标签、转发、统计等功能;
步骤4)中,mangle表是iptables工具保存对数据包修改规则的表,通常在这张表中对数据包进行修改和打标签。INPUT链是数据包进入内核TCP/IP协议栈的入口。
步骤4)中,将数据包中的标签保存到连接中可以通过iptables的connmark模块来完成,命令为:iptables-t mangle-A INPUT-j CONNMARK--save-mark;
步骤5)中,将连接中的标签保存到数据包中可以通过iptables的connmark模块来完成,命令为:iptables-t mangle-A INPUT-j CONNMARK--restore-mark;
步骤6)中,TC是Linux系统中常用的网络流量限制工具,可以根据数据包的标签对带有相同标签的流量进行限速;具有标签的数据包即标记为i的数据包的带宽Bi可以通过以下公式进行计算:
Q为网关的最大物理带宽值,B为所有标记的数据包的带宽期望值总和,bi为标记为i的数据包的带宽期望值。
Claims (8)
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_OPTIONS为setsockopt函数的两个控制参数。
4.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤3)中,容器传输到物理机作为第一层NAT,物理机输到公网作为第二层NAT。
5.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤4)中,网关机器加载第二Linux内核模块,具体包括:
会调用nf_register_hook函数将钩子函数挂载到内核的netfilter链中。
6.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤4)中,将数据包IP头部options字段中取出容器的IP地址,具体包括:
第二Linux内核模块的钩子函数通过调用getsockopt内核函数,从IPPROTO_IP协议的IP_OPTIONS字段中获取容器的IP地址,IPPROTO_IP和IP_OPTIONS为getsockopt函数的两个控制参数。
7.根据权利要求1所述的基于IP协议可选字段的容器公网带宽限制方法,其特征在于,步骤4)中,将数据包打上相应的标签,具体包括:通过对数据包结构体的mark字段赋值进行操作,数据包结构体传给第二Linux内核模块的钩子函数,标签值为容器IP地址的32位数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110178017.6A CN113067719B (zh) | 2021-02-07 | 2021-02-07 | 一种基于ip协议可选字段的容器公网带宽限制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110178017.6A CN113067719B (zh) | 2021-02-07 | 2021-02-07 | 一种基于ip协议可选字段的容器公网带宽限制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113067719A CN113067719A (zh) | 2021-07-02 |
CN113067719B true CN113067719B (zh) | 2021-12-07 |
Family
ID=76558793
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110178017.6A Active CN113067719B (zh) | 2021-02-07 | 2021-02-07 | 一种基于ip协议可选字段的容器公网带宽限制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113067719B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105915470A (zh) * | 2016-01-27 | 2016-08-31 | 无锡华云数据技术服务有限公司 | 一种基于Linux流量控制的弹性带宽配置方法 |
CN109120481A (zh) * | 2018-09-27 | 2019-01-01 | 上海新炬网络信息技术股份有限公司 | 基于Zabbix开源组件监控DCOS容器和内部中间件的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017113231A1 (zh) * | 2015-12-30 | 2017-07-06 | 华为技术有限公司 | 一种报文传输的方法、装置和系统 |
CN108696452B (zh) * | 2018-05-16 | 2020-06-02 | 腾讯科技(深圳)有限公司 | 一种容器级网络流量采集、网络质量标识方法、装置、系统 |
-
2021
- 2021-02-07 CN CN202110178017.6A patent/CN113067719B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105915470A (zh) * | 2016-01-27 | 2016-08-31 | 无锡华云数据技术服务有限公司 | 一种基于Linux流量控制的弹性带宽配置方法 |
CN109120481A (zh) * | 2018-09-27 | 2019-01-01 | 上海新炬网络信息技术股份有限公司 | 基于Zabbix开源组件监控DCOS容器和内部中间件的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113067719A (zh) | 2021-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11677851B2 (en) | Accelerated network packet processing | |
CN111371779B (zh) | 一种基于dpdk虚拟化管理系统的防火墙及其实现方法 | |
US11824778B2 (en) | Dynamic chain of service functions for processing network traffic | |
CN101247308B (zh) | 基于网络处理器实现IPv6穿越IPv4的隧道报文处理方法 | |
KR101969194B1 (ko) | 네트워킹 장치 가상화를 위한 패킷 처리 오프로딩 기법 | |
US6944670B2 (en) | Method and apparatus for multiple processing of a plurality of communication protocols on a single processing machine | |
US9379973B2 (en) | Binary compatible extension architecture in an openflow compliant network environment | |
US9331936B2 (en) | Switch fabric support for overlay network features | |
US20160261496A1 (en) | Packet forwarding in data center network | |
JP4658606B2 (ja) | Ipネットワーク接続のための資源管理 | |
WO2016192686A1 (zh) | 数据报文转发 | |
US20230043721A1 (en) | Packet Processing Method, Device, System, and Storage Medium | |
KR20140057553A (ko) | 가상화된 네트워크와 비-가상화된 네트워크 간 가상화 게이트웨이 | |
US10911579B1 (en) | Generating programmatically defined fields of metadata for network packets | |
CN114301868B (zh) | 快速生成虚拟容器浮动ip的方法及网络直通的方法和装置 | |
US20200028785A1 (en) | Virtual machine packet processing offload | |
WO2021238746A1 (zh) | 网络系统及其中的报文传输方法和相关装置 | |
CN107733765B (zh) | 映射方法、系统和相关设备 | |
CN109246016B (zh) | 跨vxlan的报文处理方法和装置 | |
CN113067719B (zh) | 一种基于ip协议可选字段的容器公网带宽限制方法 | |
CN106209554B (zh) | 跨虚拟可扩展局域网的报文转发方法和设备 | |
WO2015154393A1 (zh) | 业务节点能力处理方法、装置、业务分类器及业务控制器 | |
CN112929278A (zh) | 一种网络通信设备多核并行快速转发数据包的方法及系统 | |
US20230239249A1 (en) | Packet Transmission Method, Apparatus, Device, and Computer-Readable Storage Medium | |
TWI789169B (zh) | 向量包處理轉發方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |