本公开涉及计算机技术领域,尤其涉及一种服务对象的访问方法和装置,以及一种电子设备、一种计算机可读存储介质和一种计算机程序产品。
背景技术:
当前云平台建设主要分为两条主流技术路线,分别是基于docker(一种开源的应用容器引擎)的容器技术和基于虚拟机的虚拟化技术。其中,基于docker的容器技术建设的容器云平台大部分以kubernetes(简称k8s,一种开源的容器编排引擎)集群的形式部署。
pod是kubernetes集群创建或部署的最小/最简单的基本单位,一个pod代表kubernetes集群上正在运行的一个进程。通常,kubernetes集群内pod所处的网络环境,与kubernetes集群外的终端所在的网络环境不是同一个网络,于是如何从kubernetes集群外的终端高速低延迟地访问kubernetes集群内pod上的服务对象成为需要考虑的问题。
相关技术中,需要指定一个kubernetes集群范围内的特定端口与服务对象的容器端口相对应。kubernetes集群外的终端可以通过pod所在的终端和特定端口访问服务对象。
但是,特定端口占用的是kubernetes集群内的端口资源,kubernetes集群内的端口资源会随着kubernetes集群内终端的数量和服务对象的数量的增加而越来越少,需要记录kubernetes集群内全部可用的端口,进而从可用的端口中指定特定端口。当kubernetes集群内的端口资源匮乏时,可能无法为服务对象指定特定端口,导致kubernetes集群外的终端无法访问kubernetes集群内的服务对象的问题。
技术实现要素:
本公开提供了一种服务对象的访问方法和装置,以及一种电子设备、一种计算机可读存储介质和一种计算机程序产品,以至少解决相关技术中kubernetes集群内的端口资源不足,容易出现无法为服务对象指定特定端口,导致kubernetes集群外的终端无法访问kubernetes集群内的服务对象的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供了一种服务对象的访问方法,应用于集群内的第一终端,所述方法包括:检测容器集合被调度到所述第一终端上的事件,所述容器集合封装有服务对象,且所述容器集合配置有与所述服务对象对应的容器端口;在所述第一终端本地设置与所述容器端口对应的终端端口,并生成所述容器端口与所述终端端口之间的对应关系;接收所述集群外的第二终端发送的访问请求,解析所述访问请求得到所述终端端口;按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端。
可选地,在所述第一终端本地设置与所述容器端口对应的终端端口之前,所述方法包括:判断所述容器集合上是否存在所述服务对象的配置文件;当所述容器集合中存在所述配置文件时,执行在所述第一终端本地设置与所述容器端口对应的终端端口的操作。
可选地,所述配置文件包含终端端口创建标识;在所述第一终端本地设置与所述容器端口对应的终端端口之前,所述方法还包括:当所述容器集合中存在所述配置文件时,判断所述终端端口创建标识是否为有效状态;当所述终端端口创建标识为有效状态时,执行在所述第一终端本地设置与所述容器端口对应的终端端口的操作。
可选地,在所述第一终端本地设置与所述容器端口对应的终端端口之后,所述方法还包括:将所述终端端口、所述容器端口和所述第一终端的终端标识存储至所述配置文件。
可选地,在所述检测容器集合被调度到所述第一终端上的事件之前,所述方法包括:检测所述容器集合从所述第一终端上被销毁的事件;在所述第一终端本地设置与所述容器端口对应的终端端口之前,所述方法还包括:判断所述终端端口创建标识是否为有效状态,并判断所述配置文件中是否存储有终端端口、容器端口和终端标识;当所述终端端口创建标识为有效状态,且所述配置文件中未存储有终端端口、容器端口和终端标识时,执行在所述第一终端本地设置与所述容器端口对应的终端端口的操作。
可选地,所述方法还包括:当所述终端端口创建标识为有效状态,且所述配置文件中存储有终端端口、容器端口和终端标识时,判断所述配置文件中存储的终端标识与所述第一终端的终端标识是否相同;当所述配置文件中存储的终端标识与所述第一终端的终端标识相同时,将所述配置文件中存储的终端端口作为所述容器端口对应的终端端口;当所述配置文件中存储的终端标识与所述第一终端的终端标识不相同时,将所述配置文件中存储的终端端口、容器端口和终端标识删除。
可选地,在所述解析所述访问请求得到所述终端端口之后,所述方法还包括:判断解析得到的终端端口与设置的终端端口是否相同;当所述解析得到的终端端口与所述设置的终端端口相同时,执行所述按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端的操作。
根据本公开实施例的第二方面,提供了一种服务对象的访问装置,应用于集群内的第一终端,所述装置包括:检测单元,被配置为执行检测容器集合被调度到所述第一终端上的事件,所述容器集合封装有服务对象,且所述容器集合配置有与所述服务对象对应的容器端口;设置单元,被配置为执行在所述第一终端本地设置与所述容器端口对应的终端端口,并生成所述容器端口与所述终端端口之间的对应关系;解析单元,被配置为执行接收所述集群外的第二终端发送的访问请求,解析所述访问请求得到所述终端端口;返回单元,被配置为执行按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端。
可选地,所述装置还包括:判断单元,被配置为执行在所述设置单元在第一终端本地设置与所述容器端口对应的终端端口之前,判断所述容器集合上是否存在所述服务对象的配置文件;所述设置单元,被配置为执行当所述容器集合中存在所述配置文件时,在所述第一终端本地设置与所述容器端口对应的终端端口。
可选地,所述配置文件包含终端端口创建标识;所述判断单元,还被配置为执行在所述设置单元在第一终端本地设置与所述容器端口对应的终端端口之前,当所述容器集合中存在所述配置文件时,判断所述终端端口创建标识是否为有效状态;所述设置单元,被配置为执行当所述终端端口创建标识为有效状态时,在所述第一终端本地设置与所述容器端口对应的终端端口。
可选地,所述装置还包括:存储单元,被配置为执行在所述设置单元在第一终端本地设置与所述容器端口对应的终端端口之后,将所述终端端口、所述容器端口和所述第一终端的终端标识存储至所述配置文件。
可选地,所述检测单元,还被配置为执行在检测容器集合被调度到所述第一终端上的事件之前,检测所述容器集合从所述第一终端上被销毁的事件;所述判断单元,还被配置为执行在所述设置单元在第一终端本地设置与所述容器端口对应的终端端口之前,判断所述终端端口创建标识是否为有效状态,并判断所述配置文件中是否存储有终端端口、容器端口和终端标识;所述设置单元,被配置为执行当所述终端端口创建标识为有效状态,且所述配置文件中未存储有终端端口、容器端口和终端标识时,在所述第一终端本地设置与所述容器端口对应的终端端口。
可选地,所述判断单元,还被配置为执行当所述终端端口创建标识为有效状态,且所述配置文件中存储有终端端口、容器端口和终端标识时,判断所述配置文件中存储的终端标识与所述第一终端的终端标识是否相同;所述设置单元,还被配置为执行当所述配置文件中存储的终端标识与所述第一终端的终端标识相同时,将所述配置文件中存储的终端端口作为所述容器端口对应的终端端口;所述装置还包括:删除单元,被配置为执行当所述配置文件中存储的终端标识与所述第一终端的终端标识不相同时,将所述配置文件中存储的终端端口、容器端口和终端标识删除。
可选地,所述判断单元,还被配置为执行在所述解析单元解析所述访问请求得到所述终端端口之后,判断解析得到的终端端口与设置的终端端口是否相同;所述返回单元,被配置为执行当所述解析得到的终端端口与所述设置的终端端口相同时,按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端。
根据本公开实施例的第三方面,提供了一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的服务对象的访问方法。
根据本公开实施例的第四方面,提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的服务对象的访问方法。
根据本公开实施例的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的服务对象的访问方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
在本公开的实施例提供的服务对象的访问方案中,在集群内的第一终端上,如果检测到容器集合被调度到第一终端上的事件,则在第一终端本地设置与服务对象的容器端口对应的终端端口,并生成容器端口与终端端口之间的对应关系,其中,容器集合封装有服务对象,而且容器集合配置有与服务对象对应的容器端口。然后,接收集群外的第二终端发送的访问请求,解析访问请求得到终端端口,按照对应关系获取与终端端口对应的容器端口,返回与终端端口对应的容器端口至第二终端,以便第二终端可以访问服务对象。本公开的实施例将为容器端口设置对应的终端端口的操作,置于容器集合被调度到第一终端之后执行,相比于先为容器端口设置对应的终端端口,后将容器集合调度到第一终端而言,避免了终端端口(即特定端口)可用的第一终端上由于没有可以保证容器集合正常运行的其他资源,导致容器集合进入无法被调度到特定端口可用的第一终端的等待状态,而影响第二终端无法正常访问服务对象的问题。而且,与容器端口对应的终端端口占用的是第一终端的端口资源,并非占用集群的端口资源,减少了集群的端口资源占用量。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种服务对象的访问方法的流程图。
图2是根据一示例性实施例示出的一种从kubernetes集群外的第二终端访问kubernetes集群内的服务对象的方案示意图。
图3是根据一示例性实施例示出的一种服务对象的访问装置的框图。
图4是根据一示例性实施例示出的一种服务对象的访问电子设备的框图。
图5是根据一示例性实施例示出的一种用于对服务对象进行访问的电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种服务对象的访问方法的流程图,如图1所示,该服务对象的访问方法可以应用于集群内的第一终端,集群可以为容器云集群,本公开的实施例中的集群以kubernetes集群为例进行说明,集群内的第一终端可以理解为集群内的主机(宿主机)。该服务对象的访问方法可以包括以下步骤。
在步骤s11中,检测容器集合被调度到第一终端上的事件。
在本公开的实施例中,第一终端可以为集群内的任意终端,容器集合可以表示kubernetes集群中的pod。容器集合中可以封装有服务对象,而且,容器集合还可以配置有与服务对象对应的容器端口,该容器端口可以理解为服务对象在容器集合中所占用的端口资源,即容器端口占用的是容器集合的端口资源。通常,一个容器集合中的一个服务对象占用的容器端口也是唯一的。服务对象可以根据实际情况由用户设定,而且,每种类型的服务对象可以具有各自的特性。在集群内的每个第一终端上,可以检测是否存在容器集合被调度到当前第一终端上。当检测到容器集合被调度到当前第一终端上的事件时,执行步骤s12;当未检测到容器集合被调度到当前第一终端上的事件时,可以不做额外操作。
在步骤s12中,在第一终端本地设置与容器端口对应的终端端口,并生成容器端口与终端端口之间的对应关系。
在本公开的实施例中,为服务对象的容器端口设置对应的终端端口,该终端端口可以表示第一终端本地的端口,占用的是第一终端的端口资源,并非占用kubernetes集群的端口资源。而且,还可以生成容器端口与终端端口之间的对应关系,例如,为容器端口r01设置对应的终端端口z01,则生成容器端口r01与终端端口z01之间的对应关系。
在步骤s13中,接收集群外的第二终端发送的访问请求,解析访问请求得到终端端口。
在本公开的实施例中,集群外的第二终端可以根据第一终端的网络地址向第一终端发送访问请求,在访问请求中可以携带终端访问端口。当第一终端从访问请求中解析得到终端访问端口之后,判断终端访问端口与上述为容器端口设置的终端端口是否相同,如果终端访问端口与终端端口相同,则执行步骤s14;如果终端访问端口与终端端口不相同,则不做额外操作,或者,向第二终端返回终端访问端口错误的提示信息。
在步骤s14中,按照对应关系获取与终端端口对应的容器端口,返回容器端口至第二终端。
在本公开的实施例中,可以根据容器端口与终端端口之间的对应关系,搜索与终端端口对应的容器端口,进而将搜索到的容器端口返回至第二终端。将容器端口返回至第二终端之后,第二终端可以通过容器集合的容器端口访问对应的服务对象,至此,实现了集群外的第二终端访问集群内的服务对象的功能。
在本公开的实施例提供的服务对象的访问方案中,在集群内的第一终端上,如果检测到容器集合被调度到第一终端上的事件,则在第一终端本地设置与服务对象的容器端口对应的终端端口,并生成容器端口与终端端口之间的对应关系,其中,容器集合封装有服务对象,而且容器集合配置有与服务对象对应的容器端口。然后,接收集群外的第二终端发送的访问请求,解析访问请求得到终端端口,按照对应关系获取与终端端口对应的容器端口,返回与终端端口对应的容器端口至第二终端,以便第二终端可以访问服务对象。本公开的实施例将为容器端口设置对应的终端端口的操作,置于容器集合被调度到第一终端之后执行,相比于先为容器端口设置对应的终端端口,后将容器集合调度到第一终端而言,避免了终端端口(即特定端口)可用的第一终端上由于没有可以保证容器集合正常运行的其他资源,导致容器集合进入无法被调度到特定端口可用的第一终端的等待状态,而影响第二终端无法正常访问服务对象的问题。而且,与容器端口对应的终端端口占用的是第一终端的端口资源,并非占用集群的端口资源,减少了集群的端口资源占用量。
在本公开的一种示例性实施例中,在第一终端本地设置与容器端口对应的终端端口之前,判断容器集合上是否存在服务对象的配置文件,当容器集合中存在配置文件时,执行在第一终端本地设置与容器端口对应的终端端口的操作;当容器集合中不存在配置文件时,可以不执行在第一终端本地设置与容器端口对应的终端端口的操作。该配置文件可以由用户按照不同的服务对象对应的配置文件模板编写而成。配置文件中可以包含多个字段或者标识,每个字段或者标识在配置文件中具有各自的作用,例如,终端端口创建标识、写回注释字段等,其中,终端端口创建标识的状态可以表示是否为容器端口设置对应的终端端口,写回注释字段中的字段内容可以用于存储已设置的终端端口等。本公开的实施例可以为服务对象编写对应的配置文件,一方面可以利用配置文件表示是否为服务对象的容器端口设置对应的终端端口,另一方面可以利用配置文件存储已设置的终端端口。在检测到容器集合被调度到第一终端之后,并且为服务对象的容器端口设置对应的终端端口之前,可以判断容器集合是否存在服务对象配置文件,为设置终端端口增加了一步判断操作,进一步提升了设置终端端口的操作的安全性,避免为任意服务对象的容器端口设置对应的终端端口,节省了第一终端的端口资源。
在本公开的一种示例性实施例中,在第一终端本地设置与容器端口对应的终端端口之前,判断容器集合上是否存在服务对象的配置文件,当容器集合中存在配置文件时,还可以进一步判断终端端口创建标识是否为有效状态,当终端端口创建标识为有效状态时,执行在第一终端本地设置与容器端口对应的终端端口的操作;当终端端口创建标识为无效状态时,可以不执行在第一终端本地设置与容器端口对应的终端端口的操作。在实际应用中,有效状态可以利用“true”表示,无效状态可以利用“false”表示。本公开的实施例可以根据配置文件中的终端端口创建标识的状态(包括有效状态和无效状态),判断是否为容器端口设置对应的终端端口,也就是说,不仅需要判断容器集合中是否存在配置文件,还要判断配置文件中终端端口创建标识是否为有效状态,为设置终端端口增加了两步判断操作,进一步提升了设置终端端口的操作的安全性,避免为任意服务对象的容器端口设置对应的终端端口,节省了第一终端的端口资源。
在本公开的一种示例性实施例中,在第一终端本地设置与容器端口对应的终端端口之后,可以将终端端口、容器端口和第一终端的终端标识存储至配置文件。在实际应用中,可以将终端端口、容器端口和终端标识存储至配置文件的写回注释字段,而且,终端端口、容器端口和终端标识三者之间具有对应关系。本公开的实施例在为容器端口设置对应的终端端口之后,将终端端口、容器端口和终端标识写回容器集合的配置文件,目的在于后续在容器集合重新调度到相同的第一终端时,可以直接将配置文件中保存的,与该容器集合中的服务对象的容器端口对应的终端端口作为该容器集合中的服务对象的容器端口对应的终端端口,避免了容器集合在重新调度到相同的第一终端时,重复为容器集合中的服务对象的容器端口设置对应的终端端口的操作,提升了为容器端口设置对应的终端端口的效率。
在本公开的一种示例性实施例中,在检测容器集合被调度到第一终端上的事件之前,如果检测容器集合从第一终端上被销毁的事件,则在第一终端本地设置与容器端口对应的终端端口之前,可以判断配置文件中的终端端口创建标识是否为有效状态,并判断配置文件中是否存储有终端端口、容器端口和终端标识。当终端端口创建标识为有效状态,且配置文件中未存储有终端端口、容器端口和终端标识时,执行在第一终端本地设置与容器端口对应的终端端口的操作;当终端端口创建标识为无效状态,或者,配置文件中已存储有终端端口、容器端口和终端标识时,可以不执行在第一终端本地设置与容器端口对应的终端端口的操作。
如果终端端口创建标识为有效状态,而且,配置文件中存储有终端端口、容器端口和终端标识,则判断配置文件中存储的终端标识与第一终端的终端标识是否相同。当配置文件中存储的终端标识与第一终端的终端标识相同时,将配置文件中存储的终端端口作为容器端口对应的终端端口;当配置文件中存储的终端标识与第一终端的终端标识不相同时,将配置文件中存储的终端端口、容器端口和终端标识删除。
需要说明的是,从第一终端上被销毁的容器集合,与调度到第一终端上的容器集合可以为同一个容器集合。由于资源限制、调度策略、第一终端下线或应用升级的影响,kubernetes集群可能将第一终端上已部署的容器集合销毁后重新调度。重新调度的容器集合可能被调度到原来的第一终端,也可能被调度到不同的第一终端。因此,在检测到容器集合被销毁的事件后,并不会立即删除该容器集合已添加的写回注释字段。
在实际应用中,判断配置文件中是否存储有终端端口、容器端口和终端标识时,可以判断配置文件的写回注释字段中是否存储有终端端口、容器端口和终端标识。例如,检测容器集合pod01在第一终端a上被销毁的事件,之后,检测容器集合pod01被调度到第一终端a上的事件。在为容器集合pod01中的服务对象f01的容器端口r01设置对应的终端端口之前,判断容器集合pod01的配置文件c01中终端端口创建标识是否为有效状态,以及判断配置文件c01中是否存储有终端端口、容器端口和终端标识。当配置文件c01中终端端口创建标识为有效状态,且配置文件c01中未存储有终端端口、容器端口和终端标识时,为容器端口r01设置对应的终端端口。当配置文件c01中终端端口创建标识为有效状态,且配置文件c01中存储有终端端口、容器端口和终端标识时,判断配置文件c01中存储的终端标识是否为第一终端a的终端标识,如果配置文件c01中存储的终端标识为第一终端a的终端标识,则将配置文件c01中存储的终端端口作为容器端口r01的终端端口。需要强调的是,配置文件c01中存储的终端端口、容器端口和终端标识具有对应关系。而且,配置文件c01中存储的容器端口也需要与容器端口r01相同,才可以将配置文件c01中存储的终端端口作为容器端口r01的终端端口。
本公开的实施例描述了在第一终端上销毁某容器集合之后,又将该容器集合调度到第一终端上的情况下,可以先判断配置文件中的终端端口创建标识是否为有效状态,以及判断配置文件中是否存储有终端端口、容器端口和终端标识,在终端端口创建标识为有效状态,且配置文件中未存储有终端端口、容器端口和终端标识时,才为容器端口设置对应的终端端口,为设置终端端口增加了判断操作,进一步提升了设置终端端口的操作的安全性。在终端端口创建标识为有效状态,且配置文件中存储有终端端口、容器端口和终端标识时,判断配置文件存储的终端端口、容器端口和终端标识是否为该容器集合之前被调度到第一终端上之后,为服务对象的容器端口设置的终端端口,如果配置文件中存储的终端端口是该容器集合之前被调度到第一终端上之后,为服务对象的容器端口设置的终端端口,则直接利用存储的终端端口,不需要重新为容器端口设置对应的终端端口,减少了为容器端口设置对应的终端端口的操作步骤,提升了为容器端口设置对应的终端端口的效率。
在本公开的一种示例性实施例中,在解析访问请求得到终端端口之后,可以判断解析得到的终端端口,即访问请求中携带的终端端口,与为容器端口设置的终端端口是否相同,如果解析得到的终端端口与为容器端口设置的终端端口相同,表示集群外的第二终端确定了待访问的服务对象在第一终端上的终端端口,则向第二终端返回容器端口。第二终端可以根据容器端口从容器集合中访问服务对象。本公开的实施例中的第一终端在接收到集群外的第二终端发送的访问请求之后,需要对访问请求进行解析,从而解析得到访问请求中携带的终端端口,进而,判断是否为服务对象的容器端口设置过与访问请求中携带的终端端口相同的端口,如果设置过与访问请求中携带的终端端口相同的端口,则将与设置的终端端口对应的容器端口返回给第二终端,以便第二终端可以通过容器端口从调度到第一终端上的容器集合中访问服务对象。本公开的实施例中的第一终端对第二终端发来的访问请求进行解析、判断,以便确定第二终端是否可以访问服务对象。本公开实施例由第一终端确定第二终端是否可以访问服务对象,而非由集群确定第二终端是否可以访问服务对象,减轻了集群的数据处理量和运行压力。
在本公开的一种示例性实施例中,上述服务对象的访问方法可以应用于集群内的第一终端,具体可以应用于集群内的第一终端的容器网络接口(containernetworkinterface,cni)插件。cni插件是kubernetes集群支持的一种用于配制集群网络的接口形式。可以理解为,上述服务对象的访问方法的执行主体,即集群内的第一终端可以根据cni插件执行上述各个步骤。
基于上述关于服务对象的访问方法实施例的相关说明,下面介绍一种从kubernetes集群外的第二终端访问kubernetes集群内的服务对象的方案。如图2所示,该从kubernetes集群外的第二终端访问kubernetes集群内的服务对象的方案可以包含kubernetes系统、多个第一终端(例如,vm1、vm2和vm3)和kubernetes集群外的第二终端。其中,每个第一终端中可以包含cni插件。在该从kubernetes集群外的第二终端访问kubernetes集群内的服务对象的方案中,用户可以首先编写服务对象的配置文件,例如:
其中,“enable-new-service”表示终端端口创建标识(creation-annotation),“true”表示终端端口创建标识的有效状态。
在用户编写完配置文件之后,kubernetes系统的调度器会创建服务对象,并将服务对象封装在pod1中,将pod1调度到可用的第一终端(例如vm1)上。当第一终端vm1上的cni插件检测到有新的pod1被成功调度到第一终端vm1时,cni插件会检测配置文件中creation-annotation是否为有效状态。如果creation-annotation为无效状态,则不做任何额外操作。如果creation-annotation为有效状态,则cni插件为配置文件中携带的容器端口(containerport:443)创建对应的终端端口(host-port:30001)。然后,cni插件将终端端口、容器端口和第一终端vm1的主机名写入配置文件的写回注释字段(writeback-annotation),例如,“new-service-{{hostname}}:{{container-port:443,host-port:30001}…}”。
至此,第二终端可以根据第一终端vm1的ip或者主机名和终端端口生成访问请求,向第一终端vm1发送访问请求,第一终端vm1解析访问请求,并判断访问请求中的终端端口是否为host-port:30001,如果访问请求中的终端端口为host-port:30001,则第一终端vm1将容器端口(containerport:443)返回给第二终端,第二终端可以根据容器端口(containerport:443)从pod1中访问服务对象,实现了从kubernetes集群外的第二终端访问kubernetes集群内的服务对象。
本公开的实施例不仅将为容器端口设置对应的终端端口的操作,置于容器集合被调度到第一终端之后,还将为容器端口设置对应的终端端口的操作由第一终端自行完成。由于终端端口只占用容器集合所在的第一终端的端口资源,不会造成整个集群范围内的端口资源的浪费,提高了kubernetes集群范围内的端口资源的利用率,端口资源不再是限制kubernetes集群规模增长的瓶颈点。
而且,终端端口只与当前第一终端的容器集合的容器端口对应,本公开的实施例中kubernetes集群外的第二终端直接访问容器集合所在第一终端ip和终端端口,即可访问容器集合中的服务对象,没有中间层进行请求流量的再转发,大幅度降低了访问延迟。
图3是根据一示例性实施例示出的一种服务对象的访问装置的框图。该服务对象的访问装置可以应用于集群的第一终端,该服务对象的访问装置具体可以包括如下单元。
检测单元31,被配置为执行检测容器集合被调度到所述第一终端上的事件,所述容器集合封装有服务对象,且所述容器集合配置有与所述服务对象对应的容器端口;
设置单元32,被配置为执行在所述第一终端本地设置与所述容器端口对应的终端端口,并生成所述容器端口与所述终端端口之间的对应关系;
解析单元33,被配置为执行接收所述集群外的第二终端发送的访问请求,解析所述访问请求得到所述终端端口;
返回单元34,被配置为执行按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端。
在本公开的一种示例性实施例中,所述装置还包括:
判断单元,被配置为执行在所述设置单元32在第一终端本地设置与所述容器端口对应的终端端口之前,判断所述容器集合上是否存在所述服务对象的配置文件;
所述设置单元32,被配置为执行当所述容器集合中存在所述配置文件时,在所述第一终端本地设置与所述容器端口对应的终端端口。
在本公开的一种示例性实施例中,所述配置文件包含终端端口创建标识;
所述判断单元,还被配置为执行在所述设置单元32在第一终端本地设置与所述容器端口对应的终端端口之前,当所述容器集合中存在所述配置文件时,判断所述终端端口创建标识是否为有效状态;
所述设置单元32,被配置为执行当所述终端端口创建标识为有效状态时,在所述第一终端本地设置与所述容器端口对应的终端端口。
在本公开的一种示例性实施例中,所述装置还包括:存储单元,被配置为执行在所述设置单元32在第一终端本地设置与所述容器端口对应的终端端口之后,将所述终端端口、所述容器端口和所述第一终端的终端标识存储至所述配置文件。
在本公开的一种示例性实施例中,所述检测单元31,还被配置为执行在检测容器集合被调度到所述第一终端上的事件之前,检测所述容器集合从所述第一终端上被销毁的事件;
所述判断单元,还被配置为执行在所述设置单元32在第一终端本地设置与所述容器端口对应的终端端口之前,判断所述终端端口创建标识是否为有效状态,并判断所述配置文件中是否存储有终端端口、容器端口和终端标识;
所述设置单元32,被配置为执行当所述终端端口创建标识为有效状态,且所述配置文件中未存储有终端端口、容器端口和终端标识时,在所述第一终端本地设置与所述容器端口对应的终端端口。
在本公开的一种示例性实施例中,所述判断单元,还被配置为执行当所述终端端口创建标识为有效状态,且所述配置文件中存储有终端端口、容器端口和终端标识时,判断所述配置文件中存储的终端标识与所述第一终端的终端标识是否相同;
所述设置单元32,还被配置为执行当所述配置文件中存储的终端标识与所述第一终端的终端标识相同时,将所述配置文件中存储的终端端口作为所述容器端口对应的终端端口;
所述装置还包括:删除单元,被配置为执行当所述配置文件中存储的终端标识与所述第一终端的终端标识不相同时,将所述配置文件中存储的终端端口、容器端口和终端标识删除。
在本公开的一种示例性实施例中,所述判断单元,还被配置为执行在所述解析单元33解析所述访问请求得到所述终端端口之后,判断解析得到的终端端口与设置的终端端口是否相同;
所述返回单元34,被配置为执行当所述解析得到的终端端口与所述设置的终端端口相同时,按照所述对应关系获取与所述终端端口对应的所述容器端口,返回所述容器端口至所述第二终端。
关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图4是根据一示例性实施例示出的一种服务对象的访问电子设备的框图。例如,电子设备400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图4,电子设备400可以包括以下一个或多个组件:处理组件402,存储器404,电力组件406,多媒体组件408,音频组件410,输入/输出(i/o)的接口412,传感器组件414,以及通信组件416。
处理组件402通常控制电子设备400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件402可以包括一个或多个处理器420来执行指令,以完成上述服务对象的访问方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理组件402可以包括多媒体模块,以方便多媒体组件408和处理组件402之间的交互。
存储器404被配置为存储各种类型的数据以支持在电子设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图像,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
电源组件406为电子设备400的各种组件提供电力。电源组件406可以包括电源管理系统,一个或多个电源,及其他与为电子设备400生成、管理和分配电力相关联的组件。
多媒体组件408包括在所述电子设备400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当电子设备400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件410被配置为输出和/或输入音频信号。例如,音频组件410包括一个麦克风(mic),当电子设备400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
i/o接口412为处理组件402和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件414包括一个或多个传感器,用于为电子设备400提供各个方面的状态评估。例如,传感器组件414可以检测到电子设备400的打开/关闭状态,组件的相对定位,例如所述组件为电子设备400的显示器和小键盘,传感器组件414还可以检测电子设备400或电子设备400一个组件的位置改变,用户与电子设备400接触的存在或不存在,电子设备400方位或加速/减速和电子设备400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件416被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件416经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件416还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述服务对象的访问方法。
在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器404,上述指令可由电子设备400的处理器420执行以完成上述服务对象的访问方法。可选地,计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序可由电子设备400的处理器420执行以完成上述服务对象的访问方法。可选地,该计算机程序可以存储在电子设备400的计算机可读存储介质中,该计算机可读存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
图5是根据一示例性实施例示出的一种用于对服务对象进行访问的电子设备的框图。例如,电子设备500可以被提供为一服务器。参照图5,电子设备500包括处理组件522,其进一步包括一个或多个处理器,以及由存储器532所代表的存储器资源,用于存储可由处理组件522的执行的指令,例如应用程序。存储器532中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件522被配置为执行指令,以执行上述服务对象的访问方法。
电子设备500还可以包括一个电源组件526被配置为执行电子设备500的电源管理,一个有线或无线网络接口550被配置为将电子设备500连接到网络,和一个输入输出(i/o)接口558。电子设备500可以操作基于存储在存储器532的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。