CN115277568A - 一种数据发送方法、装置、设备及存储介质 - Google Patents
一种数据发送方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115277568A CN115277568A CN202210857568.XA CN202210857568A CN115277568A CN 115277568 A CN115277568 A CN 115277568A CN 202210857568 A CN202210857568 A CN 202210857568A CN 115277568 A CN115277568 A CN 115277568A
- Authority
- CN
- China
- Prior art keywords
- pod
- point
- message
- sent
- endpoint
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000005540 biological transmission Effects 0.000 claims abstract description 19
- 230000003068 static effect Effects 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 17
- 239000000126 substance Substances 0.000 claims 1
- 238000004891 communication Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 239000003795 chemical substances by application Substances 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- RJKFOVLPORLFTN-LEKSSAKUSA-N Progesterone Chemical compound C1CC2=CC(=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H](C(=O)C)[C@@]1(C)CC2 RJKFOVLPORLFTN-LEKSSAKUSA-N 0.000 description 5
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012544 monitoring process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 101000652292 Homo sapiens Serotonin N-acetyltransferase Proteins 0.000 description 2
- 102100030547 Serotonin N-acetyltransferase Human genes 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000005641 tunneling Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- 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/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种数据发送方法、装置、设备及存储介质。该方法包括:获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;获取当前网络类型对应的发送规则;根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,通过本发明的技术方案,以使得Pod的第二网卡能够被Service识别到,在通过Service访问时能够自动转发到Pod的第二网卡,进而保证每个Pod负载均衡。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据发送方法、装置、设备及存储介质。
背景技术
Kubernetes是一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡,Kubernetes提供两种网络模型,一种是基于隧道技术的overlay虚拟网络,例如flannel,antrea等,当前节点的Pod访问其他节点的Pod时,源Pod的报文通过源物理节点和目的物理节点之间的隧道到达目的Pod。另一种是基于物理网卡的underlay网络,例如MacVlan,SRIOV等,当前节点的Pod访问其他节点的Pod时,源Pod的报文直接从源物理节点网卡发送到目的物理节点网卡中。
现有技术中,用户通过在Kubernetes集群内部部署MacVlan等插件,来给Pod提供多个网卡,让Pod可以使用支持underlay网络的网卡进行通信,从而大幅度提高应用的网络通信能力。目前使用MacVlan插件的方法是Pod使用第二网卡(第一网卡用于支持overlay虚拟网络,第二网卡用于支持underlay网络)直接对外进行点对点通信,这种方式有以下缺陷:
缺少负载均衡机制:每个Pod直接通过第二网卡IP对外提供服务,而在Kubernetes体系中,第二网卡不能被Kubernetes的Service模型自动识别,所以无法通过Service的方式访问Pod的第二网卡。如果多个相同类型的Pod提供服务时,外部访问这些Pod需要自己来处理负载均衡功能,确保访问该服务时能够负载均衡到每个Pod,并且Pod重启时可能会发生IP地址变化,需要外部能够自动处理这种情况,这就导致Pod第二网卡功能不能提供足够的便利性。
发明内容
本发明实施例提供一种数据发送方法、装置、设备及存储介质,以使得Pod的第二网卡能够被Service识别到,在通过Service访问时能够自动转发到Pod的第二网卡,进而保证每个Pod负载均衡。
根据本发明的一方面,提供了一种数据发送方法,包括:
获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;
获取当前网络类型对应的发送规则;
根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
根据本发明的另一方面,提供了一种数据发送装置,该数据发送装置包括:
第一获取模块,用于获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;
第二获取模块,用于获取当前网络类型对应的发送规则;
发送模块,用于根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的数据发送方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的数据发送方法。
本发明实施例通过获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;获取当前网络类型对应的发送规则;根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,以使得Pod的第二网卡能够被Service识别到,在通过Service访问时能够自动转发到Pod的第二网卡,进而保证每个Pod负载均衡。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明实施例中的一种数据发送方法的流程图;
图2是本发明实施例中的一种数据发送装置的结构示意图;
图3是本发明实施例中的一种电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一
图1为本发明实施例提供的一种数据发送方法的流程图,本实施例可适用于数据发送的情况,该方法可以由本发明实施例中的数据发送装置来执行,该装置可采用软件和/或硬件的方式实现,如图1所示,该方法具体包括如下步骤:
S110,获取待发送报文和endpoint中的Pod IP。
其中,所述Pod IP为第二网卡的IP。
其中,所述待发送报文包括:目的地址、源地址以及待发送数据。
其中,所述endpoint中的Pod IP为更新后的Pod IP,具体的,获取第一工作队列中的目标对象;根据所述目标对象中的Service name和Service namespace查询Servicescache,得到所述目标对象对应的第一Pod IP;在将endpoint中的Pod IP修改为所述第一Pod IP之后,获取endpoint中的Pod IP。
S120,获取当前网络类型对应的发送规则。
其中,当前网络类型可以为虚拟网络,也可以为物理网络,本发明实施例对此不进行限制。
具体的,若当前网络类型为虚拟网络,则虚拟网络对应的发送规则为:基于endpoint中的Pod IP对应的静态路由规则将所述待发送报文发送至所述endpoint中的PodIP对应的Pod。若当前网络类型为物理网络,则物理网络对应的发送规则为:将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
S130,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
具体的,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod的方式可以为:若当前网络类型为虚拟网络,则将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,获取所述endpoint中的Pod IP对应的静态路由规则,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址,基于静态路由规则、修改后的源地址和目的地址将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod的方式还可以为:若当前网络类型为物理网络,则将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的物理网卡的IP地址,根据修改后的源地址和目的地址将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
可选的,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,包括:
若当前网络类型为虚拟网络,则获取目标网段对应的静态路由规则;
基于静态路由规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
其中,所述静态路由规则为根据创建的网段池对应的目标网段确定的静态路由规则。
例如可以是:在namespace中创建一个NetworkAttachmentDefinition,用来给当前namespace的Pod第二网卡分配IP地址,当监听到创建事件后,解析出NetworkAttachmentDefinition包含的目标网段,然后配合vector0设备添加所述目标网段对应的静态路由规则。
需要说明的是,用户在使用MacVlan功能的过程中需要在对应的namespace中创建一个NetworkAttachmentDefinition,用来给当前namespace的Pod第二网卡分配IP地址,NetworkAttachmentDefinition中的网段可以自定义(NetworkAttachmentDefinition中的网段,与,Pod网段、Service网段以及MacVlanCIDR网段均不冲突,其中,MacVlanCIDR网段为全局参数字段对应的网段,全局参数字段用于为VectorNode资源分配IP地址),并且NetworkAttachmentDefinition需要包含一段通往MacVlanCIDR的静态路由规则,确保Pod访问MacVlanCIDR时报文通过Pod第二块网卡发送出去,该静态路由规则会被MacVlan-cni设置在Pod内部。vector-agent通过kube-apiserver监听NetworkAttachmentDefinition的创建、删除以及更新等事件。当监听到创建事件后,解析出NetworkAttachmentDefinition包含的网段信息,然后配合vector0设备添加该网段的静态路由规则,确保节点上访问Pod第二块网卡时报文通过vector0设备发送出去。
具体的,基于静态路由规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod的方式可以为:将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,获取目标网段对应的静态路由规则,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址。基于静态路由规则、修改后的源地址以及修改后的目的地址将待发送报文发送至所述endpoint中的Pod IP对应的Pod。
可选的,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,包括:
若当前网络类型为物理网络,则将所述待发送报文发送至所述endpoint中的PodIP对应的Pod。
具体的,若当前网络类型为物理网络,则将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的物理网卡的IP地址,根据修改后的源地址和目的地址将待发送报文发送至所述endpoint中的Pod IP对应的Pod。
可选的,在根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod之前,还包括:
将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址。
其中,所述当前节点的MacVlan子接口的IP地址的获取方式可以为:获取第二工作队列中的VectorNode资源;根据全局参数确定所述VectorNode资源对应的IP地址;基于物理网卡创建一个MacVlan子接口;将所述VectorNode资源对应的IP地址确定为所述MacVlan子接口的IP地址,VectorNode是一种基于Kubernetes的CRD资源,该资源收集当前节点的网卡信息,以及保存当前节点vector0设备的IP地址。
可选的,在根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod之前,还包括:
将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的物理网卡的IP地址。
可选的,在获取待发送报文和endpoint中的Pod IP之前还包括:
获取第一工作队列中的目标对象;
根据所述目标对象中的Service name和Service namespace查询Servicescache,得到所述目标对象对应的第一Pod IP;
将endpoint中的Pod IP修改为所述第一Pod IP。
其中,所述第一工作队列中包括至少一个目标对象,例如可以是:workqueue中包括至少一个queue key。
其中,所述第一工作队列的创建方式为:预先定义第一工作队列,当监听到Service编辑事件时,若Service信息中包含了第二网卡标识,则将所述Service信息中的Service name和Service namespace作为一个对象添加至第一工作队列;当监听到Pod编辑事件,则获取Pod编辑事件对应的第一Pod标签;若Services cache中存在和第一Pod标签相同的目标Pod标签,则将目标Pod标签对应的Service信息中的Service name和Servicenamespace作为一个对象添加至第一工作队列。
需要说明的是,本发明实施例适用于3中Service访问:
1、集群外部通过Loadbalancer类型的Service访问。
2、集群外部通过NodePort类型的Service访问。
3、集群内部通过ClusterIP类型的Service访问。
需要说明的是,Services cache中存储有Service编辑事件对应的Service信息。Services cache的生成方式为:当监听到Service编辑事件时,若Service信息中包含了第二网卡标识,则将所述Service信息存储至Services cache中。其中,Service信息包括:Service name、Service namespace、端口号、至少一个Pod label、至少一个Pod IP以及第二网卡标识,Pod label的数量和Pod的数量相同,同一Service信息中的Pod label均相同。
在一个具体的例子中,创建Service,Service信息包括:至少一个Pod对应的标签、第二网卡标识、Service name、Service namespace以及端口号;监听所述Pod和所述Service;若监听到Service编辑事件,则获取Service信息;若Service信息中包括第二网卡标识,则将所述Service信息中的Service name和Service namespace作为一个queue key添加至第一工作队列;将Service编辑事件对应的Service信息存储至Services cache;若监听到Pod编辑事件,则获取Pod编辑事件对应的第一Pod标签;若Services cache中存在和第一Pod标签相同的目标Pod标签,则将目标Pod标签对应的Service信息中的Service name和Service namespace作为一个queue key添加至第一工作队列;获取第一工作队列中的queue key;根据所述queue key中的Service name和Service namespace查询Servicescache,得到Service name和Service namespace对应的第一Services信息;获取所述第一Services信息中的第一Pod IP;将endpoint中的Pod IP修改为所述第一Pod IP。
可选的,在根据所述目标对象中的Service name和Service namespace查询Services cache,得到所述目标对象对应的第一Pod IP之前,还包括:
若监听到Service编辑事件,则获取Service信息;
若Service信息中包括第二网卡标识,则将所述Service信息中的Service name和Service namespace作为一个对象添加至第一工作队列;
将Service编辑事件对应的Service信息存储至Services cache。
需要说明的是,将Service编辑事件对应的Service信息存储至Services cache的方式为:若Service信息中包括第二网卡标识,则将包括第二网卡标识的Service信息存储至Services cache。
可选的,还包括:
若监听到Pod编辑事件,则获取Pod编辑事件对应的第一Pod标签;
若Services cache中存在和第一Pod标签相同的目标Pod标签,则将目标Pod标签对应的Service信息中的Service name和Service namespace作为一个对象添加至第一工作队列。
可选的,将所述待发送报文的目标地址修改为所述endpoint中的Pod IP,包括:
根据所述目标对象中的Service name和Service namespace查询数据库,得到所述目标对象对应的目标端口号;
根据所述目标对象对应的第一Pod IP和所述目标对象对应的目标端口号创建ipvs规则;
基于ipvs规则将所述待发送报文的目标地址修改为所述endpoint中的Pod IP。
具体的,根据所述目标对象中的Service name和Service namespace查询数据库,得到所述目标对象对应的目标端口号,例如可以是,获取第一工作队列中的queue key;根据所述queue key中的Service name和Service namespace查询Services cache,得到Service name和Service namespace对应的第一Services信息;获取所述第一Services信息中的第一Pod IP和端口号。
在一个具体的例子中,在namespace中创建相应的Service,其中Service的selector部分除了填写后端pods对应的labels之前还需要额外添加secondarynetwork标识。vector-controller中secondarynetworkcontroller在启动后会通过InformerFactory机制监听Pod以及Service增删更新等事件。当vector-controller监听到Service创建/更新/删除事件时,首先会检查该Service的selector字段信息中是否包含了secondarynetwork标识,如果包含,则将Servicename以及Servicenamespace添加到已经定义好的workqueue中,同时更新Servicescache缓存信息。当vector-controller监听到pod创建/更新/删除事件时,通过podlabel和Servicescache中Serviceselector字段信息进行匹配,如果podlabel能够匹配到除了secondarynetwork之前所有的Serviceselector字段,则将该Servicename以及Servicenamespace添加到已经定义好的workqueue中。在vector-controller定义了多了worker用来处理workqueue,worker首先会从workqueue中取出一个queuekey,该queuekey的实际意义即Servicename以及以及Servicenamespace。然后通过InformerFactorycache中尝试根据Servicename以及Servicenamespace获取Service信息。如果返回结果是NotFound则认为该Service已经被删除,vector-controller会清理掉相应的endpoints。如果返回结果正常则根据Service的selector信息查询相关的pods,在根据pods信息以及Service信息构建最新的endpoints,查询当前pods以及Service已经创建的对应的endpoints。通过将最新的endpointsPODIP列表和已经创建的endpoints比较,得出哪些endpoints需要新建,哪些属于需要更新部分字段,以及哪些删除。分别对相应的endpoints根据上述判断进行新增/删除/更新等行为。Kube-proxy会根据上述自定义的Service以及endpoints创建相应的ipvs规则,从而实现基于MacVlan第二块网卡的Service负载均衡规则。
需要说明的是,vector-controller(数据控制器):部署在Kubernetes集群的主节点中,主要作用是实现Pod第二块网卡Service的模型以及配合vector-agent给相应的VectorNode资源分配IP地址,vector-agent(节点配置代理):节点网络配置组件,部署在Kubernetes集群的所有节点中,主要作用为在每个节点配置独立的MacVlan设备vector0,并监听集群中NetworkAttachmentDefinition信息,自动添加对应网段的静态路由。
可选的,在将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址之前,还包括:
获取第二工作队列中的VectorNode资源;
根据全局参数确定所述VectorNode资源对应的IP地址;
基于物理网卡创建一个MacVlan子接口;
将所述VectorNode资源对应的IP地址确定为所述MacVlan子接口的IP地址。
其中,所述第二工作队列用于存储创建的VectorNode资源,所述第二工作队列的获取方式为:若监听到VectorNode资源的创建事件,则将VectorNode资源添加至第二工作队列中。
在一个具体的例子中,若当前网络类型为虚拟网络,则获取全局参数字段,创建VectorNode资源,其中,VectorNode资源包括:节点名称、物理网卡名称以及SecondaryIP;若监听到VectorNode资源的创建事件,则将VectorNode资源添加至第二工作队列中;获取第二工作队列中的VectorNode资源;根据所述全局参数确定所述VectorNode资源对应的IP地址;基于物理网卡创建一个MacVlan子接口;将所述VectorNode资源对应的IP地址配置到MacVlan子接口上。重复执行上述过程,直至得到每个节点的MacVlan子接口的IP地址。
可选的,获取目标网段对应的静态路由规则包括:
创建网段池,其中,所述网段池对应的网段,与,全局参数对应的网段、Service网段以及Pod网段均不同;
获取网段池对应的目标网段;
获取所述目标网段对应的静态路由规则。
在一个具体的例子中,在namespace中创建NetworkAttachmentDefiniti-on,用来给当前namespace的Pod第二块网卡分配IP地址,NetworkAttachmentDefinition中的网段可以自定义(与Pod网段、Service网段以及MacVlanCIDR网段均不冲突),并且该NetworkAttachmentDefinition包含一段通往MacVlanCIDR的静态路由,确保Pod访问MacVlanCIDR时报文通过Pod第二块网卡发送出去,该静态路由会被MacVlan-cni自动设置在Pod内部。vector-agent监听NetworkAttachmentDefinition的创建/删除/更新等事件。当监听到创建事件后,解析出NetworkAttachmentDefinition包含的目标网段,然后配合vector0设备添加该网段的静态路由规则,确保节点上访问Pod第二块网卡时报文通过vector0设备发送出去。
现有技术中使用MacVlan插件的方法是Pod使用第二网卡直接对外进行点对点通信,每个Pod都会占用一个公网IP地址,在地址池比较紧张的情况下创建的Pod数量会受到限制,并且需要人为规划地址池,避免产生地址冲突,增加了人力成本。
本发明实施例通过添加全局参数字段为VectorNode资源分配IP地址,并且创建了用于为Pod分配IP地址的网段池,解决了占用大量公网IP的问题,能够保证创建的Pod数量不受限制,有效避免了地址冲突。
在一个具体的例子中,当Pod第二块网卡使用的网络为虚拟网络时,实现上述功能的方法涉及如下步骤:
在vector-controller的配置文件中添加一个MacVlanCIDR字段,配置一个虚拟网段,例如168.254.0.0/16,需要确保该网段和物理网段不重复即可,后续从该网段中分配IP地址给VectorNode。
vector-agent启动时针对当前节点创建一个名为VectorNode的CRD资源,该资源包含了当前节点的名称,节点的物理网卡名称,以及初始值为空的SecondaryIP字段等。
vector-controller通过kube-apiserver监听到VectorNode创建后,将VectorNode放入到对应的workqueue中,之后worker从workqueue中取出VectorNode进行处理:vector-controller自动从MacVlanCIDR中分配一个IP地址并更新到VectorNode的SecondaryIP字段中,kube-apiserver:社区标准组件,Kubernetes集群对象访问入口,可以通过访问该api操作集群内部的各个资源,包括Kubernetes标准对象,例如Service,endpoint,node等,也可以操作kubernetes自定义资源对象,即CRD资源对象。
vector-agent通过kube-apiserver监听VectorNode的更新事件,当监听到VectorNode的SecondaryIP发生了更新,并且VectorNode包含的节点名称和vector-agent所在节点的名称相同时,判断被更新的VectorNode资源为当前节点对应的资源,之后vector-agent基于该节点的物理网卡创建一个MacVlan子接口,名称设置为vector0,并配置上SecondaryIP的IP地址。
用户在使用MacVlan功能的过程中需要在对应的namespace中创建一个NetworkAttachmentDefinition,用来给当前namespace的Pod第二块网卡分配IP地址,NetworkAttachmentDefinition中的网段可以自定义(与Pod网段、Service网段以及MacVlanCIDR网段均不冲突即可),并且该NetworkAttachmentDefinition包含一段通往MacVlanCIDR的静态路由,确保Pod访问MacVlanCIDR时报文通过Pod第二块网卡发送出去,该静态路由会被MacVlancni自动设置在Pod内部。
vector-agent通过kube-apiserver监听NetworkAttachmentDefinition的创建/删除/更新等事件。当监听到创建事件后,解析出NetworkAttachmentDefinition包含的网段信息,然后配合vector0设备添加该网段的静态路由规则,确保节点上访问Pod第二块网卡时报文通过vector0设备发送出去。
用户通过Service访问Pod时,报文到达节点后,目标地址会根据Service的定义被IPVS修改为Pod的第二块网卡,之后根据节点静态路由规则,报文自动通过vector0设备发送出去,并且报文会被SNAT为vector0设备的IP发送到Pod的第二块网卡,即访问Pod的第二块网卡的报文源地址是vector0设备IP地址。Pod回复报文时,目标地址为源节点vector0设备的IP地址,根据Pod内部静态路由将报文从第二块网卡发送到源节点的vector0设备,即按照原有的路径返回,从而确保Service访问的完整性。
在另一个具体的例子中,当Pod第二块网卡使用的网络为物理网络时,实现上述功能的方法涉及如下步骤:
用户在使用MacVlan功能的过程中需要在对应的namespace中创建一个NetworkAttachmentDefinition,用来给当前namespace的Pod第二块网卡分配IP地址,NetworkAttachmentDefinition中的网段需要设置为物理网段。
用户通过Service访问Pod时,报文到达节点后,目标地址会根据Service的定义被IPVS修改为Pod的第二块网卡IP,因为该IP和节点物理网络的网段相同,所以之后根据节点本身物理网络的路由,报文自动通过物理网卡发送出去,并且报文会被SNAT为物理网卡的IP发送到Pod的第二块网卡,即访问Pod的第二块网卡的报文源地址是物理网卡IP地址。Pod回复报文时,目标地址为源节点物理网卡的IP地址,根据Pod内部物理网络自动生成的路由将报文从第二块网卡发送到源节点物理网卡,即按照原有的路径返回,从而确保Service访问的完整性。
本实施例的技术方案,通过获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;获取当前网络类型对应的发送规则;根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,以使得Pod的第二网卡能够被Service识别到,在通过Service访问时能够自动转发到Pod的第二网卡,进而保证每个Pod负载均衡。
实施例二
图2为本发明实施例提供的一种数据发送装置的结构示意图。本实施例可适用于数据发送的情况,该装置可采用软件和/或硬件的方式实现,该装置可集成在任何提供数据发送功能的设备中,如图2所示,所述数据发送装置具体包括:第一获取模块210、第二获取模块220和发送模块230。
其中,第一获取模块,用于获取待发送报文和endpoint中的Pod IP,其中,所述PodIP为第二网卡的IP;
第二获取模块,用于获取当前网络类型对应的发送规则;
发送模块,用于根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
本实施例的技术方案,通过获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;获取当前网络类型对应的发送规则;根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,以使得Pod的第二网卡能够被Service识别到,在通过Service访问时能够自动转发到Pod的第二网卡,进而保证每个Pod负载均衡。
实施例三
图3示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图3所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如数据发送方法。
在一些实施例中,数据发送方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的数据发送方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据发送方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种数据发送方法,其特征在于,包括:
获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;
获取当前网络类型对应的发送规则;
根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的PodIP对应的Pod。
2.根据权利要求1所述的方法,其特征在于,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,包括:
若当前网络类型为虚拟网络,则获取目标网段对应的静态路由规则;
基于静态路由规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
3.根据权利要求1所述的方法,其特征在于,根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod,包括:
若当前网络类型为物理网络,则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
4.根据权利要求2所述的方法,其特征在于,在根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod之前,还包括:
将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址。
5.根据权利要求3所述的方法,其特征在于,在根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod之前,还包括:
将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的物理网卡的IP地址。
6.根据权利要求1所述的方法,其特征在于,在获取待发送报文和endpoint中的Pod IP之前还包括:
获取第一工作队列中的目标对象;
根据所述目标对象中的Service name和Service namespace查询Services cache,得到所述目标对象对应的第一Pod IP;
将endpoint中的Pod IP修改为所述第一Pod IP。
7.根据权利要求6所述的方法,其特征在于,在根据所述目标对象中的Service name和Service namespace查询Services cache,得到所述目标对象对应的第一Pod IP之前,还包括:
若监听到Service编辑事件,则获取Service信息;
若Service信息中包括第二网卡标识,则将所述Service信息中的Service name和Service namespace作为一个对象添加至第一工作队列;
将Service编辑事件对应的Service信息存储至Services cache。
8.根据权利要求7所述的方法,其特征在于,还包括:
若监听到Pod编辑事件,则获取Pod编辑事件对应的第一Pod标签;
若Services cache中存在和第一Pod标签相同的目标Pod标签,则将目标Pod标签对应的Service信息中的Service name和Service namespace作为一个对象添加至第一工作队列。
9.根据权利要求8所述的方法,其特征在于,将所述待发送报文的目标地址修改为所述endpoint中的Pod IP,包括:
根据所述目标对象中的Service name和Service namespace查询数据库,得到所述目标对象对应的目标端口号;
根据所述目标对象对应的第一Pod IP和所述目标对象对应的目标端口号创建ipvs规则;
基于ipvs规则将所述待发送报文的目标地址修改为所述endpoint中的Pod IP。
10.根据权利要求4所述的方法,其特征在于,在将所述待发送报文的目的地址修改为所述endpoint中的Pod IP,将所述待发送报文的源地址修改为当前节点的MacVlan子接口的IP地址之前,还包括:
获取第二工作队列中的VectorNode资源;
根据全局参数确定所述VectorNode资源对应的IP地址;
基于物理网卡创建一个MacVlan子接口;
将所述VectorNode资源对应的IP地址确定为所述MacVlan子接口的IP地址。
11.根据权利要求2所述的方法,其特征在于,获取目标网段对应的静态路由规则包括:
创建网段池,其中,所述网段池对应的网段,与,全局参数对应的网段、Service网段以及Pod网段均不同;
获取网段池对应的目标网段;
获取所述目标网段对应的静态路由规则。
12.一种数据发送装置,其特征在于,包括:
第一获取模块,用于获取待发送报文和endpoint中的Pod IP,其中,所述Pod IP为第二网卡的IP;
第二获取模块,用于获取当前网络类型对应的发送规则;
发送模块,用于根据当前网络类型对应的发送规则将所述待发送报文发送至所述endpoint中的Pod IP对应的Pod。
13.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-11中任一项所述的数据发送方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-11中任一项所述的数据发送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210857568.XA CN115277568A (zh) | 2022-07-20 | 2022-07-20 | 一种数据发送方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210857568.XA CN115277568A (zh) | 2022-07-20 | 2022-07-20 | 一种数据发送方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115277568A true CN115277568A (zh) | 2022-11-01 |
Family
ID=83766989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210857568.XA Pending CN115277568A (zh) | 2022-07-20 | 2022-07-20 | 一种数据发送方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115277568A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452406A (zh) * | 2008-12-23 | 2009-06-10 | 北京航空航天大学 | 一种对操作系统透明的机群负载平衡方法 |
CN107947961A (zh) * | 2017-10-17 | 2018-04-20 | 上海数讯信息技术有限公司 | 基于SDN的Kubernetes网络管理系统与方法 |
CN111049796A (zh) * | 2019-10-25 | 2020-04-21 | 中国通信服务股份有限公司 | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 |
CN111371696A (zh) * | 2020-03-24 | 2020-07-03 | 广西梯度科技有限公司 | 一种在Kubernetes中实现Pod网络流控的方法 |
CN111541765A (zh) * | 2020-04-21 | 2020-08-14 | 北京思特奇信息技术股份有限公司 | 一种用于多级路由调度的方法及系统 |
US20210072966A1 (en) * | 2019-09-05 | 2021-03-11 | International Business Machines Corporation | Method and system for service rolling-updating in a container orchestrator system |
CN113783922A (zh) * | 2021-03-26 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 负载均衡的方法、系统和装置 |
CN113971095A (zh) * | 2020-07-24 | 2022-01-25 | 红帽公司 | 扩展进程中的kubernetes应用程序接口 |
WO2022067791A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种数据处理、传输方法及相关设备 |
CN114416200A (zh) * | 2022-01-11 | 2022-04-29 | 浪潮云信息技术股份公司 | 声明式云平台监控采集配置动态管理和加载的系统及方法 |
-
2022
- 2022-07-20 CN CN202210857568.XA patent/CN115277568A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452406A (zh) * | 2008-12-23 | 2009-06-10 | 北京航空航天大学 | 一种对操作系统透明的机群负载平衡方法 |
CN107947961A (zh) * | 2017-10-17 | 2018-04-20 | 上海数讯信息技术有限公司 | 基于SDN的Kubernetes网络管理系统与方法 |
US20210072966A1 (en) * | 2019-09-05 | 2021-03-11 | International Business Machines Corporation | Method and system for service rolling-updating in a container orchestrator system |
CN111049796A (zh) * | 2019-10-25 | 2020-04-21 | 中国通信服务股份有限公司 | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 |
CN111371696A (zh) * | 2020-03-24 | 2020-07-03 | 广西梯度科技有限公司 | 一种在Kubernetes中实现Pod网络流控的方法 |
CN111541765A (zh) * | 2020-04-21 | 2020-08-14 | 北京思特奇信息技术股份有限公司 | 一种用于多级路由调度的方法及系统 |
CN113971095A (zh) * | 2020-07-24 | 2022-01-25 | 红帽公司 | 扩展进程中的kubernetes应用程序接口 |
WO2022067791A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种数据处理、传输方法及相关设备 |
CN113783922A (zh) * | 2021-03-26 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 负载均衡的方法、系统和装置 |
CN114416200A (zh) * | 2022-01-11 | 2022-04-29 | 浪潮云信息技术股份公司 | 声明式云平台监控采集配置动态管理和加载的系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113934464A (zh) | Linux系统中启动安卓应用的方法、装置和电子设备 | |
CN113344074B (zh) | 模型训练方法、装置、设备及存储介质 | |
CN114070889B (zh) | 配置方法、流量转发方法、设备、存储介质及程序产品 | |
CN116155604A (zh) | 一种容器网络微隔离防护方法、装置、设备及存储介质 | |
CN116032614A (zh) | 容器网络微隔离方法、装置、设备和介质 | |
CN115277568A (zh) | 一种数据发送方法、装置、设备及存储介质 | |
CN115756877A (zh) | 资源同步方法、装置、设备及存储介质 | |
CN115442129A (zh) | 一种管理集群访问权限的方法、装置和系统 | |
CN114610719A (zh) | 跨集群数据处理方法、装置、电子设备以及存储介质 | |
CN114650222B (zh) | 参数配置方法、装置、电子设备和存储介质 | |
CN112596922B (zh) | 通信管理方法、装置、设备和介质 | |
CN115495518B (zh) | 一种生成图表的方法和装置 | |
CN117014494A (zh) | 一种应用云化方法、装置、电子设备和存储介质 | |
CN116455702A (zh) | 虚拟局域网的配置方法和装置 | |
CN116886775A (zh) | 一种对外暴露方法、装置、集群部署系统及存储介质 | |
CN115623003A (zh) | 应用服务迁移方法、装置、电子设备及存储介质 | |
CN115098520A (zh) | 设备数据更新方法、装置、电子设备及存储介质 | |
CN115913954A (zh) | 集群管理信息交互方法、装置、设备和存储介质 | |
CN115599734A (zh) | 数据采集方法、装置、电子设备及存储介质 | |
CN116668532A (zh) | 一种数据通信方法、装置、电子设备及存储介质 | |
CN115309568A (zh) | 一种实现多进程文件共享的方法、装置、设备及介质 | |
CN115776489A (zh) | 信息采集方法、装置、电子设备和计算机可读存储介质 | |
CN115455029A (zh) | 换电数据获取方法、装置、电子设备及存储介质 | |
CN115766260A (zh) | 一种网络访问白名单生成方法、装置、设备及存储介质 | |
CN114201302A (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 |