(12)发明专利申请
(10)申请公布号 CN 111901203 A(43)申请公布日 2020.11.06
(21)申请号 202010766043.6(22)申请日 2020.08.03
(71)申请人 北京启明星辰信息安全技术有限公
司
地址 100193 北京市海淀区东北旺西路8号
21号楼启明星辰大厦102号
申请人 启明星辰信息技术集团股份有限公
司(72)发明人 张力茂 张欣欣
(74)专利代理机构 北京安信方达知识产权代理
有限公司 11262
代理人 王素燕 栗若木(51)Int.Cl.
H04L 12/26(2006.01)H04L 29/06(2006.01)
权利要求书2页 说明书9页 附图5页
()发明名称
一种捕获网络流量的方法及Kubernetes集群
(57)摘要
本发明实施例公开了一种捕获网络流量的方法以及Kubernetes集群,其中该方法包括:当监听到流量捕获请求时,流量捕获控制器根据所述流量捕获请求确定对应的POD;所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求。如此,能够实现在Kubernetes集群中捕获网络流量,从而为对Kubernetes集群进行网络流量监控提供了可行性。CN 111901203 ACN 111901203 A
权 利 要 求 书
1/2页
1.一种捕获网络流量的方法,应用于Kubernetes集群,所述Kubernetes集群部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序,该方法包括:
当监听到流量捕获请求时,所述流量捕获控制器根据所述流量捕获请求确定对应的POD;
所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;
所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求。
2.根据权利要求1所述的方法,其特征在于,所述Kubernetes集群部署有域名系统DNS服务器;
所述流量捕获控制器根据所述流量捕获请求确定对应的POD,包括:
所述流量捕获控制器根据所述流量捕获请求中携带的待访问POD域名与域名系统DNS服务器进行交互确定所述待访问POD域名对应的POD的IP地址;
所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器,包括:
所述流量捕获控制器根据所述对应的POD的IP地址将所述流量捕获请求发送给对应的POD中的网络流量捕获容器。
3.根据权利要求1所述的方法,其特征在于,所述网络流量捕获容器采用以下方式部署到POD中:
当所述Kubernetes集群的应用程序接口服务器APIServer接收到创建POD请求时,使用所述APIServer中的Admissionwebhook控制器的MutatingAdmissionWebhooks功能将所述网络流量捕获容器的部署配置信息以补丁的方式自动添加到所述创建POD请求中。
4.根据权利要求1所述的方法,其特征在于,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端;
所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器,包括:
所述流量捕获控制器中的RPC客户端以远程调用的方式将所述流量捕获请求发送给所述对应的POD中Sidecar容器中的RPC服务端;
所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求,包括:
所述对应的POD中Sidecar容器中的RPC服务端通过部署的网络流量捕获程序执行所述流量捕获请求。
5.根据权利要求1所述的方法,其特征在于,
所述流量捕获请求包括启动捕获POD中的网络流量请求或者停止捕获POD中的网络流量请求;
或者,当所述流量捕获请求包括启动捕获POD中的网络流量请求时,所述流量捕获请求还包括数据包过滤条件,所述数据包过滤条件设置为在捕获网络流量的过程中过滤掉或者
2
CN 111901203 A
权 利 要 求 书
2/2页
捕获符合所述数据包过滤条件的数据包;
或者,所述流量捕获请求包括捕获状态请求。6.根据权利要求5所述的方法,其特征在于,当启动捕获POD中的网络流量时,该方法还包括:
将捕获的网络流量组织成网络数据包文件并保存到数据库中。7.一种Kubernetes集群,其特征在于,所述Kubernetes集群部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序;
所述网络流量捕获控制器,设置为当监听到流量捕获请求时,根据流量捕获请求确定对应的POD;将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;
每个网络流量捕获容器,设置为当收到流量捕获请求时,通过部署的网络流量捕获程序执行所述流量捕获请求。
8.根据权利要求7所述的Kubernetes集群,其特征在于,所述网络流量捕获控制器对外提供应用程序接口Restfull API接口;所述Restfull API接口,设置为监听流量捕获请求。9.根据权利要求7所述的Kubernetes集群,其特征在于,每个网络流量捕获程序还设置为执行如下操作:
解析启动参数初始化运行环境,初始化与MongoDB数据库的连接,初始化RPC远程调用系统;初始化网络流量捕获引擎;
所述网络流量捕获引擎设置为执行流量捕获请求。10.根据权利要求7所述的Kubernetes集群,其特征在于,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端;
所述流量捕获控制器中的RPC客户端,设置为以远程调用的方式将所述流量捕获请求发送给所述对应的POD中Sidecar容器中的RPC服务端;
所述对应的POD中Sidecar容器中的RPC服务端,设置为通过部署的网络流量捕获程序执行所述流量捕获请求。
3
CN 111901203 A
说 明 书
一种捕获网络流量的方法及Kubernetes集群
1/9页
技术领域
[0001]本发明实施例涉及但不限于网络安全技术,尤指一种捕获网络流量的方法及Kubernetes集群。
背景技术
[0002]随着云原生架构的成熟,云计算领域开始部署大量应用。云原生属于集群架构,业务单元都运行在集群的计算节点中。虽然有Kubernetes集群可以编排整个集群的业务单元,管理业务单元的生命周期,但本申请的发明人发现,Kubernetes集群是专注于容器编排的管理平台,并不擅长管理、维护集群间的网络流量。发明内容
[0003]有鉴于此,本发明实施例提供了一种捕获网络流量的方法,应用于Kubernetes集群,所述Kubernetes集群部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序,该方法包括:
[0004]当监听到流量捕获请求时,所述流量捕获控制器根据所述流量捕获请求确定对应的POD;
[0005]所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;
[0006]所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求。
[0007]本发明实施例还提供了一种Kubernetes集群,所述Kubernetes集群部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序;[0008]所述网络流量捕获控制器,设置为当监听到流量捕获请求时,根据流量捕获请求确定对应的POD;将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;[0009]每个网络流量捕获容器,设置为当收到流量捕获请求时,通过部署的网络流量捕获程序执行所述流量捕获请求。
[0010]本发明实施例提供的技术方案,能够实现在Kubernetes集群中捕获网络流量,从而为对Kubernetes集群进行网络流量监控提供了可行性。
[0011]本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
[0012]附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的
4
CN 111901203 A
说 明 书
2/9页
实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的。[0013]图1为本发明一实施例提供的一种捕获网络流量的方法的流程示意图;[0014]图2为本发明一实施例提供的一种Kubernetes集群的结构示意图;[0015]图3为本发明一实施例提供的一种捕获网络流量的方法的流程示意图;[0016]图4为本发明一实施例提供的一种Kubernetes集群的结构示意图;[0017]图5为本发明一实施例提供的一种捕获网络流量的方法的流程示意图;[0018]图6为本发明一实施例提供的一种Kubernetes集群的结构示意图;[0019]图7为本发明一实施例提供的一种捕获网络流量的方法的流程示意图;[0020]图8为本发明一实施例提供的一种Kubernetes集群的结构示意图;[0021]图9为本发明一实施例提供的网络流量捕获程序的运行示意图。
具体实施方式
[0022]本申请描述了多个实施例,但是该描述是示例性的,而不是性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
[0023]本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的以外,实施例不受其它。此外,可以在所附权利要求的保护范围内进行各种修改和改变。[0024]此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。[0025]图1为本发明一实施例提供的一种捕获网络流量的方法的流程示意图,该方法应用于Kubernetes集群,所述Kubernetes集群部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序,如图1所示,该方法包括:[0026]步骤101,当监听到流量捕获请求时,所述流量捕获控制器根据所述流量捕获请求确定对应的POD;[0027]步骤102,所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;
5
CN 111901203 A[0028]
说 明 书
3/9页
步骤103,所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执
行所述流量捕获请求。[0029]在一示例中,所述Kubernetes集群部署有域名系统DNS服务器;[0030]所述流量捕获控制器根据所述流量捕获请求确定对应的POD,包括:
[0031]所述流量捕获控制器根据所述流量捕获请求中携带的待访问POD域名与域名系统DNS服务器进行交互确定所述待访问POD域名对应的POD的IP地址;
[0032]所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器,包括:
[0033]所述流量捕获控制器根据所述对应的POD的IP地址将所述流量捕获请求发送给对应的POD中的网络流量捕获容器。[0034]在一示例中,所述网络流量捕获容器采用以下方式部署到POD中:
[0035]当所述Kubernetes集群的应用程序接口服务器APIServer接收到创建POD请求时,使用所述APIServer中的Admissionwebhook控制器的MutatingAdmissionWebhooks功能将所述网络流量捕获容器的部署配置信息以补丁的方式自动添加到所述创建POD请求中。[0036]在一示例中,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端;
[0037]所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器,包括:
[0038]所述流量捕获控制器中的RPC客户端以远程调用的方式将所述流量捕获请求发送给所述对应的POD中Sidecar容器中的RPC服务端;
[0039]所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求,包括:
[0040]所述对应的POD中Sidecar容器中的RPC服务端通过部署的网络流量捕获程序执行所述流量捕获请求。[0041]在一示例中,所述流量捕获请求包括启动捕获POD中的网络流量请求或者停止捕获POD中的网络流量请求;[0042]或者,当所述流量捕获请求包括启动捕获POD中的网络流量请求时,所述流量捕获请求还包括数据包过滤条件,所述数据包过滤条件设置为在捕获网络流量的过程中过滤掉或者捕获符合所述数据包过滤条件的数据包;[0043]或者,所述流量捕获请求包括捕获状态请求。[0044]在一示例中,当启动捕获POD中的网络流量时,该方法还包括:[0045]将捕获的网络流量组织成网络数据包文件并保存到数据库中。[0046]本发明实施例提供的技术方案,能够实现在Kubernetes集群中捕获网络流量,从而为对Kubernetes集群进行网络流量监控提供了可行性。
[0047]图2为本发明一实施例提供的一种Kubernetes集群的结构示意图,如图2所示,该Kubernetes集群包括:
[0048]部署有网络流量捕获控制器,所述Kubernetes集群的每个POD中分别预先部署有网络流量捕获容器,每个网络流量捕获容器中分别预先部署网络流量捕获程序;[0049]所述网络流量捕获控制器,设置为当监听到流量捕获请求时,根据流量捕获请求
6
CN 111901203 A
说 明 书
4/9页
确定对应的POD;将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器;[0050]每个网络流量捕获容器,设置为当收到流量捕获请求时,通过部署的网络流量捕获程序执行所述流量捕获请求。[0051]在一示例中,所述网络流量捕获控制器对外提供应用程序接口Restfull API接口;
[0052]所述Restfull API接口,设置为监听流量捕获请求。[0053]在一示例中,每个网络流量捕获程序还设置为执行如下操作:[00]解析启动参数初始化运行环境,初始化与MongoDB数据库的连接,初始化RPC远程调用系统;初始化网络流量捕获引擎;
[0055]所述网络流量捕获引擎设置为执行流量捕获请求。[0056]在一示例中,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端;
[0057]所述流量捕获控制器中的RPC客户端,设置为以远程调用的方式将所述流量捕获请求发送给所述对应的POD中Sidecar容器中的RPC服务端;[0058]所述对应的POD中Sidecar容器中的RPC服务端,设置为通过部署的网络流量捕获程序执行所述流量捕获请求
[0059]本发明实施例提供的技术方案,能够实现在Kubernetes集群中捕获网络流量,从而为对Kubernetes集群进行网络流量监控提供了可行性。
[0060]图3为本发明一实施例提供的一种捕获网络流量的方法的流程示意图,该方法应用于图4所示的Kubernetes集群,如图4所示,该Kubernetes集群部署有网络流量捕获控制器、域名系统DNS(Domain Name System)服务器、多个POD。其中,每个POD中分别预先部署有网络流量捕获容器,每个POD中还部署有一个或者多个业务容器(图4中并未示出多个业务容器,以显示的一个业务容器为例进行说明),Pod中的多个容器能够访问同一个IP和端口范围,共享一个网络命名空间。其中,每个网络流量捕获容器中分别预先部署网络流量捕获程序,通过该网络流量捕获程序可以捕获与业务容器相同的网络命名空间的网络流量。[0061]如图3所示,该方法包括:[0062]步骤301,当监听到流量捕获请求时,流量捕获控制器根据所述流量捕获请求中携带的待访问POD域名与域名系统DNS服务器进行交互确定所述待访问POD域名对应的POD的IP地址;
[0063]在一示例中,所述网络流量捕获控制器对外提供应用程序接口Restfull API接口;通过所述Restfull API接口监听流量捕获请求。[00]在一示例中,Kubernetes集群中的DNS服务器预先保存有集群中所有POD的服务域名与IP地址的对应关系。[0065]例如,当外界使用Restfull API(Application Programming Interface,应用程序接口)接口下发流量捕获请求到流量捕获控制器后,流量捕获控制器可以将该流量捕获请求中携带的待访问POD域名发送到DNS服务器请求查询该待访问POD域名对应的POD的IP地址,DNS服务器进行域名解析在本地预先保存的对应关系中查询到该待访问POD域名对应的POD的IP地址并返回给流量捕获控制器。[0066]步骤302,所述流量捕获控制器根据所述对应的POD的IP地址将所述流量捕获请求
7
CN 111901203 A
说 明 书
5/9页
发送给对应的POD中的网络流量捕获容器;[0067]在一示例中,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为Sidecar容器并创建有RPC服务端;
[0068]所述流量捕获控制器将所述流量捕获请求发送给所述对应的POD中的网络流量捕获容器,包括:
[0069]所述流量捕获控制器中的RPC客户端以远程调用的方式将所述流量捕获请求发送给所述对应的POD中Sidecar容器中的RPC服务端。[0070]步骤303,所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求。[0071]在一示例中,所述流量捕获控制器创建有RPC(远程过程调用,Remote Procedure Call)客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端;
[0072]所述对应的POD中的网络流量捕获容器通过部署的网络流量捕获程序执行所述流量捕获请求,包括:
[0073]所述对应的POD中Sidecar容器中的RPC服务端通过部署的网络流量捕获程序执行所述流量捕获请求。[0074]在一示例中,RPC客户端为GRPC(Google Remote Procedure Call,Google远程过程调用)客户端,RPC服务端为GRPC服务端。
[0075]图5为本发明一实施例提供的一种捕获网络流量的方法的流程示意图,该方法应用于图6所示的Kubernetes集群,如图6所示,该Kubernetes集群部署有网络流量捕获控制器、域名系统DNS(Domain Name System)服务器、多个POD。其中,每个POD中分别预先部署有网络流量捕获容器,每个POD中还部署有一个或者多个业务容器(图6中并未示出多个业务容器,以显示的一个业务容器为例进行说明),Pod中的多个容器能够访问同一个IP和端口范围,共享一个网络命名空间。其中,每个网络流量捕获容器中分别预先部署网络流量捕获程序,通过该网络流量捕获程序可以捕获与业务容器相同的网络命名空间的网络流量。其中,所述流量捕获控制器创建有RPC客户端,每个POD中的网络流量捕获容器为SIdecar容器并创建有RPC服务端。[0076]如图5所示,该方法包括:[0077]步骤501,当监听到流量捕获请求时,流量捕获控制器根据所述流量捕获请求中携带的待访问POD域名与域名系统DNS服务器进行交互确定所述待访问POD域名对应的POD的IP地址;
[0078]在一示例中,所述网络流量捕获控制器对外提供应用程序接口Restfull API接口;通过所述Restfull API接口监听流量捕获请求。[0079]在一示例中,Kubernetes集群中的DNS服务器预先保存有集群中所有POD的服务域名与IP地址的对应关系。[0080]例如,当外界使用Restfull API(Application Programming Interface,应用程序接口)接口下发流量捕获请求到流量捕获控制器后,流量捕获控制器可以将该流量捕获请求中携带的待访问POD域名发送到DNS服务器请求查询该待访问POD域名对应的POD的IP地址,DNS服务器进行域名解析在本地预先保存的对应关系中查询到该待访问POD域名对应的POD的IP地址并返回给流量捕获控制器。
8
CN 111901203 A[0081]
说 明 书
6/9页
步骤502,所述流量捕获控制器中的RPC客户端以远程调用的方式将所述流量捕获
请求发送给所述对应的POD中Sidecar容器中的RPC服务端。[0082]步骤503,所述对应的POD中Sidecar容器中的RPC服务端通过部署的网络流量捕获程序执行所述流量捕获请求。[0083]在一示例中,该方法还包括:将捕获的网络流量组织成网络数据包文件并保存到数据库中。例如,网络流量捕获容器分布在不同的POD中作为SIdecar容器对业务流量进行捕获,Sidecar容器中的网络流量捕获程序会捕获与业务容器相同的网络命名空间的流量,同时可根据需求对网络流量进行过滤并组织成pcap文件存储在容器或者数据库中[0084]在一示例中,RPC客户端为GRPC(Google Remote Procedure Call,Google远程过程调用)客户端,RPC服务端为GRPC服务端。[0085]例如,对集群中网络流量捕获程序的管理采用GRPC加Restfull Api的方式,每个网络流量捕获容器都是一个的GRPC服务器,Kubernetes集群的会运行一个网络流量捕获控制器并对外提供Restfull接口,当外界使用Restfull接口下发请求到网络流量捕获控制器后,网络流量捕获控制器会根据每个请求的内容使用GRPC客户端方式转发请求到对应的GRPC服务器。
[0086]在本发明的另一实施例中,可以自动、无侵入、无感的注入流量捕获容器到Kubernetes集群的各个POD中。[0087]其中,Kubernetes集群的POD是运行业务功能的最小单元,一个POD可以包括多个容器,并且在同一个POD中的容器处于同一个网络命名空间。在同一个POD中添加辅助容器的方式称为Sidecar容器,基于POD中容器共享网络命名空间的原理,只需要把提供网络流量捕获的容器添加到运行业务容器的POD中,即在POD中添加提供网络流量捕获的Sidecar容器,就可以在不改变原有业务的前提下,实现对业务容器的网络流量捕获功能。[0088]在一示例中,利用Kubernetes集群的webhook技术将网络流量捕获容器自动注入到正常业务的POD中。客户端对Kubernetes集群下发部署POD时,创建POD请求首先会进入Kubernetes集群的API-Server(Application Programming Interface Server,应用程序接口服务),API-Server会对请求做一系列检查,包括认证、格式化、校验、补丁等动作,其中API-Server中的准入控制器Admission-webhook的MutatingAdmissionWebhooks功能可以使用补丁的方式修改收到的创建POD请求。例如,在本示例中,MutatingAdmissionWebhooks根据策略匹配到创建POD请求后,可以将网络流量捕获容器的部署配置使用补丁的方式自动添加到创建POD请求中,如此采用Kubernetes的Webhook技术在不影响正常业务的情况下将网络流量捕获容器自动注入到正常业务的POD中。。本示例中无需人工介入,特别是当容器成千上万的部署时,可以大大降低人力成本同时减少人为因素导致的问题。其中,网络流量捕获容器的部署配置可以包括该网络流量捕获容器的名称、创建该容器所用的镜像,应用监听端口、数据卷等信息。[00]例如,网络流量捕获容器可以Sidecar容器的形式注入POD中,如此在Kubernetes平台启动POD时自动注入捕获数据包的Sidecar容器,Sidecar容器根据需求捕获POD中的网络流量,实现集群架构中对业务容器自动、无侵入、无感的进行网络流量监控,并实时保存网络流量便于后续对网络流量进行分析、研究等工作。[0090]在另一示例中,还可以采用修改Yaml文件的方式完成网络流量捕获容器的注入。
9
CN 111901203 A
说 明 书
7/9页
例如,Kubernetes部署POD时可以使用Yaml文件描述POD的运行环境,其中包括容器中程序、文件系统、网络的描述,如果要在原有业务的POD中添加网络流量捕获容器只需要修改相应的Yaml文件就可以完成网络流量捕获容器的注入。使用修改容器Yaml文件实现Sidecar容器注入的方式需要人工介入,当容器成千上万的部署时就会带来较大工作量。[0091]在本发明的另一实施例中,在上述实施例提供的捕获网络流量的方法的基础上,还包括:将捕获的网络流量组织成网络数据包文件并保存到数据库中。[0092]其中,容器属于无状态运行,当容器销毁后内部数据都不会保留。而本发明实施例中网络流量捕获器程序就运行在容器中,所以需要解决网络流量形成数据包文件后的持久化问题。
[0093]在一示例中,可以使用MongoDB的Gridfs功能存储网络数据包。[0094]例如,各个网络流量捕获容器中的网络流量捕获程序捕获的网络数据包分散在不同的业务POD中,每个网络流量捕获容器都会连接集群中的MongoDB数据库,然后使用MongoDB的Gridfs方式存储网络数据包。比如,每当网络流量捕获程序捕获到的数据包超过预设阈值(比如100Mbytes)就形成一个数据包文件,并以容器名和时间作为数据包文件,然后通过Gridfs API接口存入MongoDB数据库,当需要下载数据包文件时只需要提供容器名和时间点就可以从MongoDB下载文件。如此,可以将网络流量捕获程序捕获的网络流量数据持久化到数据库,并且可以提供历史数据查询功能。例如,当需要查询某个时间点的网络流量数据时,就可以到数据库中根据时间查询对应的数据包文件。或者,需要查询某个业务容器的网络流量数据时,就可以到数据库中根据容器名查询对应的数据包文件。其中,形成的数据包文件的格式可以为pcap文件等格式。[0095]在另一示例中,可以挂载宿主机目录到容器文件系统。[0096]例如,网络流量捕获程序把捕获到的数据包文件存放在宿主机挂载到容器的目录实现数据包文件持久化功能,这个方案的优势简单、快捷,但当数据包文件多了后管理就会比较麻烦,比如从大量文件中找到某个时间段的数据包文件,这样就增加了复杂度和工作量。
[0097]图7为本发明一实施例提供的一种捕获网络流量的方法的流程示意图,应用在图8所示的Kubernetes集群,该Kubernetes集群部署有sniff Controller、DNS server、一个或者多个POD(图8中以一个POD为例进行说明,并不限定为一个POD,也可以为多个),每个POD中部署有一个Sidecar sniff、一个或者多个APP(图8中以一个APP(应用程序,application)为例进行说明,并不限定为一个APP,也可以为多个),每个POD中的容器共享一个网络命名空间Network Namespace。其中,在本实施例中,DNS server为CoreDns,其也可以是其他DNS,例如kubeDNS等。其中,sniff Controller对应于上述实施例中的网络流量捕获控制器,Sidecar sniff对应于上述实施例中的网络流量捕获容器,APP对应于上述实施例中的业务容器。[0098]如图7所示,该方法包括:[0099]1、请求入口将Restfull Request请求发送给网络流量捕获控制器;[0100]其中,该请求入口为网络流量捕获控制器对外提供的Restfull API接口。例如,当有流量捕获请求Request需要下发到网络数据捕获程序时,首先使用Restfull接口发送请求到网络流量捕获控制器。
10
CN 111901203 A[0101]
说 明 书
8/9页
2、网络流量捕获控制器根据Request请求向集群DNS服务器查询对应的POD的IP地
址;
例如,控制器根据请求内容到集群DNS服务器解析出需要控制的网络流量捕获程
序的IP地址,即对应的POD的IP地址。[0103]3、集群DNS服务器进行域名解析后向网络流量捕获控制器返回查询到的POD的IP地址;
[0104]4、网络流量捕获控制器以RPC的形式将流量捕获请求Request发送给查询到的POD中的流量捕获程序;[0105]5、流量捕获程序向网络流量捕获控制器返回RPC执行结果;[0106]6、对外通过Restfull接口返回Restfull请求结果。[0107]例如,网络流量捕获控制器使用RPC远程调用方式下发请求到流量捕获程序,流量捕获程序再使用RPC向网络流量捕获控制器返回RPC执行结果,网络流量捕获控制器再将该RPC执行结果作为Restfull请求结果通过Restfull接口返回给请求方。其中,该RPC执行结果是指是否成功执行RPC请求,流量捕获过程中出现故障等情况。[0108]在本发明的一实施例中,上述实施例涉及的每一个网络流量捕获程序可以是现有技术中任一种能够进行网络流量捕获的程序。或者,还可以是任何能够实现如图9所示流程的程序。
[0109]在本实施例中,上述实施例涉及的每一个网络流量捕获程序部署到网络流量捕获容器后,开始运行如图9所示的流程,如图9所示,该流程包括:[0110]1、初始化运行环境,解析启动参数;[0111]2、初始化MongoDB数据库连接;[0112]其中,初始化MongoDB数据库连接,包括:[0113]创建MongoDB单实例保持单实例,提供MongoDB连接函数供协程使用。[0114]3、初始化GRPC远程调用系统;[0115]其中,初始化GRPC远程调用系统,包括:创建GPRC服务端,使用协程方式监听GRPC客户端请求;[0116]4、初始化网络捕获引擎;[0117]其中,初始化网络捕获引擎包括初始化pcapgo库,并等待远程客户端发起请求,当收到请求时再根据启动参数开始捕获数据包。[0118]在一示例中,网络捕获引擎可以是现有技术中任一种可以捕获网络流量的引擎,例如pcapgo库等。
[0119]在一示例中,网络流量捕获程序首先根据启动参数初始化运行环境,然后初始化MongoDB数据库连接,数据库连接采用单实例方式建立长连接,当程序内部需要和数据库通信时可直接通过单实例的连接操作数据库,然后初始化GRPC服务器,等待远程客户端发起请求,最后当收到请求时使用golang的pcapgo库启动网络捕获任务,开始捕获网络数据包。[0120]在本发明的另一实施例中,上述实施例涉及的流量捕获请求包括启动捕获POD中的网络流量请求或者停止捕获POD中的网络流量请求;[0121]或者,当所述流量捕获请求包括启动捕获POD中的网络流量请求时,所述流量捕获请求还包括数据包过滤条件,所述数据包过滤条件设置为在捕获网络流量的过程中过滤掉
11
[0102]
CN 111901203 A
说 明 书
9/9页
或者捕获符合所述数据包过滤条件的数据包。[0122]在一示例中,网络流量捕获程序使用Sidecar方式和业务容器运行在统一个POD中。当收到的是启动捕获POD中的网络流量请求时,开始捕获POD中的网络流量,当收到的是停止捕获POD中的网络流量请求时,停止捕获POD中的网络流量。并且当流量捕获请求还包括数据包过滤条件时,网络流量捕获程序在捕获网络流量的过程中过滤掉或者捕获符合所述数据包过滤条件的数据包。例如,当数据包过滤条件为捕获预设端口的数据包时,网络流量捕获程序只捕获该预设端口的数据包,组织成文件存放在MongoDB数据库。[0123]在另一示例中,所述流量捕获请求还可以为捕获状态查询请求等任何和流量捕获相关的请求。例如,当客户端下发捕获状态查询请求时,网络流量捕获控制器通过RPC方式将该捕获状态查询请求发送给网络流量捕获程序,并通过RPC方式接收捕获状态后,再返回给客户端。该捕获状态包括:正在执行捕获、捕获中断、捕获执行失败、捕获执行成功等。[0124]本发明上述实施例提供的技术方案,可以实时捕获Kubernetes集群的业务流量,便于后续对网络流量进行分析、研究等工作。[0125]本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
12
CN 111901203 A
说 明 书 附 图
1/5页
图1
图2
13
CN 111901203 A
说 明 书 附 图
2/5页
图3
图4
14
CN 111901203 A
说 明 书 附 图
3/5页
图5
图6
15
CN 111901203 A
说 明 书 附 图
4/5页
图7
图8
16
CN 111901203 A
说 明 书 附 图
图9
17
5/5页
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务