一种实现多cpu架构容器网络代理的方法
技术领域:
:1.本发明涉及容器
技术领域:
:,特别涉及一种实现多cpu架构容器网络代理的方法。
背景技术:
::2.kubernetes(容器编排管理组件)是一个基于容器技术的分布式架构领先方案,为容器化的应用提供部署、运行、容器编排、容器调度、服务发现和动态伸缩等一系列功能,提高了大规模容器集群管理的便捷性和高可用性。3.浪潮云提供了大规模集群服务,可以支持10000节点规模,通过实现多cpu架构容器网络代理技术,提升了集群容器间的相互访问性能,支持了千万微服务的相互访问。4.容器技术是比较流行的提供微服务的paas(平台即服务)技术,而kubernetes是容器编排调度的事实标准,基于kubernetes提供容器云平台是各大云厂商的首选。各个云厂商相继推出了大规模集群产品,在大规模集群中,容器间高效的相互访问是一个很大的技术难题。5.由于在容器云集群中,容器是通过不停重建保证容器高可用的,容器的ip不是固定的,所以容器是通过容器网络代理实现容器的相互访问的。要提高容器间的访问性能,需要优化容器网络代理服务器,基于此,本发明提出了一种实现多cpu架构容器网络代理的方法。技术实现要素:6.本发明为了弥补现有技术的缺陷,提供了一种简单高效的实现多cpu架构容器网络代理的方法。7.本发明是通过如下技术方案实现的:8.一种实现多cpu架构容器网络代理的方法,其特征在于:基于iptables加ipset实现的规则匹配逻辑构建calico(容器网络管理组件),时间算法复杂度为o(1),匹配到容器组ip后,通过路由规则找到对应的容器组虚拟网卡;9.ipvs属于操作系统内核级模块,大规模集群均采用ipvs模式实现容器访问代理;10.calico通过节点本地的ipvs直接代理到主节点的api服务器上,相当于每个节点都是代理节点,从而突破了代理节点的性能瓶颈。11.服务资源支持clusterip(服务集群ip)、nodeport(节点端口)、externalip(集群外部ip)和loadbalancer(负载均衡)四种类型,上述四种类型都是通过iptables规则匹配;12.所述clusterip类型在ipvs模式下使用ipset+ipvs实现负载均衡;13.所述nodeport类型在每个节点上监听对应的节点端口,实现应用的访问入口;14.在ipvs模式下,externalip是一个虚拟ip,所述externalip类型在每个节点上监听externalip服务端口的应用访问入口,并在每个节点的kube‑ipvs0(ip虚拟服务器网卡)网卡上生成externalip,在ipvs中生成externalip服务端口的路由规则,直接路由到对应的容器组上;15.所述loadbalancer类型在ipvs模式下在每个节点的kube‑ipvs0网卡上生成loadbalancerip(负载均衡ip),并生成loadbalancerip服务端口的路由规则,直接路由到对应容器组上。16.大规模集群时,主节点的api服务器通过localhost(本地主机):2378找到元数据存储服务;主节点的网络代理通过localhost:8443找到主节点的api服务器,工作节点的网络代理通过vip(虚拟ip):8443找到主节点的api服务器;当网络代理可以正常工作后,创建externalip类型的服务资源,网络代理在每个节点上监听externalip:serviceport(服务端口),并生成ipvs负载规则;集群每个节点的组件都可以通过externalip:serviceport访问主节点的api服务器,相当于每个节点都是代理节点,从而避免了代理节点的性能瓶颈问题。17.在ipvs模式下,使用iptables加ipset匹配规则,所有服务资源使用统一的iptables规则,使用哈希算法匹配到ipset中的ip,再通过ipvs负载到对应的容器组ip上,时间算法复杂度为o(1),iptables匹配时间不随着服务资源数量的增加发生变化,从而保证了负载速度。18.用户调用api服务器创建服务资源后,容器控制器监听服务资源,并生成端点资源;容器代理器监听服务资源和端点资源,生成iptables规则和ipset数据,在kube‑ipvs0网卡生成服务ip或externalip,并生成ipvs代理规则。19.当用户访问服务时,匹配iptables规则,并结合ipset数据,判断是否本地节点,若本地节点,则直接访问对应的容器组;若不是本地节点,则通过ipvs代理到对应的容器组,实现对容器组的访问。20.当用户访问应用到具体节点时,通过iptables加ipset完成规则匹配,结合kube‑ipvs0网卡判断是否当前节点,若访问ip是当前节点,则走input(输入规则)规则,最终通过ipvs路由到具体podip上;若访问ip不是当前节点,则走forward(向前规则)规则转发到容器组的其他节点。21.该实现多cpu架构容器网络代理的方法,技术架构包括资源变更通知器、资源变更处理器、资源变更代理器三部分;22.所述资源变更通知器负责监听服务、端点、端点分段以及节点资源,这些资源发生变更后,触发变更事件,调用资源变更处理器实现具体处理逻辑;23.所述资源变更处理器负责实现服务、端点、端点分段以及节点资源的增、删与改处理逻辑,调用资源变更代理器实现具体逻辑;24.所述资源变更代理器负责实现服务、端点、端点分段以及节点资源的变更代理逻辑,支持ipvs、iptables、用户空间和内核空间四种模式。25.本发明的有益效果是:该实现多cpu架构容器网络代理的方法,支持大规模集群,支持千万微服务的相互访问,同时支持x86、arm、mips等多种cpu架构,支持国产化服务器,能够持续稳定的为用户提供容器服务,提升了产品的服务处理能力。附图说明26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。27.附图1为本发明ipvs模式下多cpu架构容器网络代理的方法示意图。28.附图2为本发明大规模集群多cpu架构容器网络代理节点示意图。29.附图3为本发明ipvs模式下多cpu架构容器网络代理的技术架构示意图。30.附图4为本发明实现多cpu架构容器网络代理的方法线程示意图。具体实施方式31.为了使本
技术领域:
:的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。32.该实现多cpu架构容器网络代理的方法,基于iptables加ipset实现的规则匹配逻辑构建calico(容器网络管理组件),时间算法复杂度为o(1),匹配到容器组ip后,通过路由规则找到对应的容器组虚拟网卡;33.ipvs属于操作系统内核级模块,大规模集群均采用ipvs模式实现容器访问代理;34.calico通过节点本地的ipvs直接代理到主节点的api服务器上,相当于每个节点都是代理节点,从而突破了代理节点的性能瓶颈。35.服务资源支持clusterip(服务集群ip)、nodeport(节点端口)、externalip(集群外部ip)和loadbalancer(负载均衡)四种类型,上述四种类型都是通过iptables规则匹配;iptables和ipvs两种模式对clusterip、nodeport的实现基本一致,但是对externalip、loadbalancer的实现是不同的。36.针对clusterip类型,都是通过iptables规则匹配,区别在于ipvs模式下使用了ipset+ipvs实现负载均衡,iptables模式下通过网络地址转换规则实现。37.针对nodeport类型,都是通过iptables规则匹配,并在每个节点上监听对应的节点端口,实现应用的访问入口。38.针对externalip类型,都是通过iptables规则匹配,区别在于:39.iptables模式下会判断externalip是否为当前节点的节点ip,若为当前节点,则生成监听externalip服务端口的应用访问入口,若不是当前节点,则通过iptables路由到对应的节点;40.ipvs模式下,externalip是一个虚拟ip,会在每个节点上监听externalip服务端口的应用访问入口,并在每个节点的kube‑ipvs0(ip虚拟服务器网卡)网卡上生成externalip,在ipvs中生成externalip服务端口的路由规则,直接路由到对应的容器组上。41.针对loadbalancer类型,都是通过iptables规则匹配,区别在于:42.iptables模式下通过iptables规则路由到别的节点;43.ipvs模式下会在每个节点的kube‑ipvs0网卡上生成loadbalancerip(负载均衡ip),并生成loadbalancerip服务端口的路由规则,直接路由到对应容器组上。44.在大规模集群中,服务资源数量比较多,若使用iptables模式,匹配一次规则很耗费时间,规模越大,耗费时间越多,所以大规模集群都选择使用ipvs模式;calico跟ipvs实现思路一致,时间算法复杂度都是o(1),性能是有保障的。45.由于ipvs属于操作系统内核级模块,跟nginx(应用代理服务器)等用户态应用比,性能要好很多,所以大规模集群中,也不建议使用用户态应用实现反向代理。46.大规模集群时,主节点的api服务器通过localhost(本地主机):2378找到元数据存储服务;主节点的网络代理通过localhost:8443找到主节点的api服务器,工作节点的网络代理通过vip(虚拟ip):8443找到主节点的api服务器;当网络代理可以正常工作后,创建externalip类型的服务资源,网络代理在每个节点上监听externalip:serviceport(服务端口),并生成ipvs负载规则;集群每个节点的组件都可以通过externalip:serviceport访问主节点的api服务器,相当于每个节点都是代理节点,从而避免了代理节点的性能瓶颈问题。47.容器网络代理主要使用网络代理服务器实现,支持ipvs(ip虚拟服务器)、iptables(ip表格)等模式,默认使用iptables模式。网络代理服务器监听服务资源、端点资源、端点分片等资源,生成iptables、ipset(ip集合)、ipvs等规则数据,通过匹配这些规则负载均衡到对应的容器组上。48.若使用iptables模式,会为每个服务资源生成对应的网络地址转换规则,转换到对应的容器组ip上,时间算法复杂度为o(n),即服务资源数据量增大几倍,耗时也增大几倍,匹配规则耗费时间随着服务资源数量的增加线性增长。在ipvs模式下,使用iptables加ipset匹配规则,所有服务资源使用统一的iptables规则,使用哈希算法匹配到ipset中的ip,再通过ipvs负载到对应的容器组ip上,时间算法复杂度为o(1),iptables匹配时间不随着服务资源数量的增加发生变化,从而保证了负载速度。49.用户调用api服务器创建服务资源后,容器控制器监听服务资源,并生成端点资源;容器代理器监听服务资源和端点资源,生成iptables规则和ipset数据,在kube‑ipvs0网卡生成服务ip或externalip,并生成ipvs代理规则。50.当用户访问服务时,匹配iptables规则,并结合ipset数据,判断是否本地节点,若本地节点,则直接访问对应的容器组;若不是本地节点,则通过ipvs代理到对应的容器组,实现对容器组的访问。51.附图1为本发明ipvs模式下多cpu架构容器网络代理的方法示意图。附图中,prerouting为路由前规则,output为输出规则,postrouting为发布路由规则。当用户访问应用到具体节点时,通过iptables加ipset完成规则匹配,结合kube‑ipvs0网卡判断是否当前节点,若访问ip是当前节点,则走input(输入规则)规则,最终通过ipvs路由到具体podip上;若访问ip不是当前节点,则走forward(向前规则)规则转发到容器组的其他节点。52.该实现多cpu架构容器网络代理的方法,技术架构包括资源变更通知器、资源变更处理器、资源变更代理器三部分;53.所述资源变更通知器负责监听服务、端点、端点分段以及节点资源,这些资源发生变更后,触发变更事件,调用资源变更处理器实现具体处理逻辑;54.所述资源变更处理器负责实现服务、端点、端点分段以及节点资源的增、删与改处理逻辑,调用资源变更代理器实现具体逻辑;55.所述资源变更代理器负责实现服务、端点、端点分段以及节点资源的变更代理逻辑,支持ipvs、iptables、用户空间和内核空间四种模式。56.与现有技术相比,该实现多cpu架构容器网络代理的方法,具有以下特点:57.1)容器代理服务器使用内核级代理模块实现容器访问代理;58.2)使用iptables+ipset实现复杂度为o(1)的时间算法;59.3)通过每个节点作为代理节点避免代理节点的性能瓶颈;60.4)支持x86/arm/mips多cpu架构,支持国产化服务器。61.将该实现多cpu架构容器网络代理的方法应用到浪潮云,使浪潮云具备了规模集群容器相互访问的能力,支持千万级微服务的使用,大大提升了浪潮云容器的访问性能;同时支持x86、arm、mips等多种cpu架构,支持国产化服务器,持续稳定的为用户提供容器服务,提升了租户的容器访问性能,保证了浪潮云的稳定性。62.以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。当前第1页12当前第1页12