一种基于容器的服务访问方法
技术领域
本发明涉及基于Kubernetes的容器服务访问技术领域,特别涉及一种基于容器的服务访问方法。
背景技术
近年来,容器技术是比较流行的提供微服务的paas技术,swarm和Kubernetes是两种比较流行的容器技术,其中Kubernetes是近期最流行的容器编排管理技术。
Kubernetes是一个全新的基于容器技术的分布式架构领先方案,在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性和高可用性。
基于Kubernetes能够提供高可用的微服务;为了访问这些服务,Kubernetes提供了三种方式:nodeport、loadbalancer、externalip。
1)nodeport使用起来比较方便,适合于开发测试阶段,但是nodeport个数有限,使用nodeport方式暴露的Kubernetes服务个数有限。
2)loadbalancer依赖于一个独立于Kubernetes的负载均衡服务,并且使用nodeport,跟nodepport方式一样,暴露的Kubernetes服务个数有限
3)externalip方式是把一个Kubernetes节点或一个节点上的一个ip暴露出去,通过externalip给用户暴露服务,只要externalip足够多,暴露的Kubernetes服务个数没有限制,但是Kubernetes本身只支持将Kubernetes节点暴露为externalip,这个限制也限制了Kubernetes暴露的服务个数。
综上所述,Kubernetes本身提供的服务暴露方式只适合开发测试阶段的使用,远达不到产品上线的要求。基于此,本发明提出了一种基于容器的服务访问方法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于容器的服务访问方法。
本发明是通过如下技术方案实现的:
一种基于容器的服务访问方法,其特征在于:
(1)设计方案:
a)服务访问支持7层的http协议和4层的tcp协议;
b)使用Ingress支持7层访问,使用Externalip支持4层访问;
c)规划Ingress节点运行ingress-controller,规划externalip节点运行Externalipcontroller;
(2)Service配置:
a)service默认使用clusterip方式,默认不提供外部访问;
b)对外暴露的Service不使用nodeport方式;
c)编写一个定时任务,检测eip对应节点的网络,当节点notready时,选择一个ready的节点与eip对应,并修改所有外部访问服务的externalip,调用eip管理的api反馈给它能用的节点ip;
d)提供为一个service创建外部访问service的api,并初始化externalip和port,记录externalip:port与service的对应关系;
(3)ExternalIpController设计
a)在k8s集群中规划externalip节点,用于提供外部访问能力;
b)在k8s的集群中externalip节点部署externalipcontroller,用于绑定外部访问网卡,并保证外部ip的高可用;
c)externalip作为资源需要管理起来,提供获取externalip的api供服务使用,原则上包括k8s服务和应用服务的一个服务分配一个externalip,externalip不是eip,是局域网ip,只用于k8s集群内部使用;
(4)Externalip管理
开发一个externalip的管理功能,通过界面管理externalip,提供增删改查功能;
(5)ExternalService管理
开发一个externalService的管理功能,通过界面管理externalip,端口号,服务名称和服务命名空间信息,并提供增删改查功能。
所述步骤(1)设计方案中,通过eip访问externalip和ingress所在节点。
所述步骤(2)Service配置中,在需要提供7层外部访问时,通过配置ingress暴露域名访问;在需要提供4层外部访问时,需要service指定externalip,通过externalip:servicePort访问;当需要给具体服务暴露给外网时,需要编辑service,新增一个端口,分配externalip和端口号,管理这个新的service、externalip:serviceport的对应关系。
所述步骤(2)Service配置中,k8s系统服务也要用ingress暴露,不能使用ingress的nodeport需要在安全组增加策略,保证外部访问不到这些端口。
所述步骤(3)ExternalIpController设计中,K8s集群中有管理网nodeip,业务网podip和clusterip,外部访问网externalip和存储网cephip四种网络,上述四种网络生产环境建议使用单独网卡。
所述步骤(4)Externalip管理中,提供给不同租户分配externalip的api,通过调用这个api,租户可以获得自己使用的externalip;同时针对部署在虚机上的k8s集群,调用api获取的是暴露服务的nodeip。
所述步骤(5)ExternalService管理中,提供给不同租户分配externalip和端口号的api,通过调用这个api,租户可以给具体服务分配externalip和端口号;同时针对部署在虚机上的k8s集群,调用api获取的是暴露服务的nodeip和端口号。
本发明的有益效果是:该基于容器的服务访问方法,同时提供了基于tcp协议和http协议访问容器服务的一体化解决方案,可以有效的访问基于Kubernetes的容器服务,并能有效管理externalip和port资源,还支持多租户模式,能够为不同租户提供不同的容器服务访问路径,且容器服务个数不受限制,使用方便快捷,为多租户提供了管理基于Kubernetes容器服务的能力。
附图说明
附图1为本发明设计方案方法示意图。
附图2为本发明ExternalIpController设计方法示意图。
附图3为本发明7层访问方法示意图。
附图4为本发明4层访问方法示意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
该基于容器的服务访问方法,包括以下步骤:
(1)设计方案:
a)服务访问支持http协议(7层)和tcp协议(4层);
b)7层访问使用ingress实现,4层访问使用externalip实现;
c)通过ingress-controller支持ingress,通过externalipcontroller支持externalip;
d)通过eip访问externalip和ingress所在节点;
(2)Service配置:
a)service默认使用clusterip方式,默认不提供外部访问;
i.需要提供7层外部访问时,通过配置ingress暴露域名访问(域名与eip对应);
ii.需要提供4层外部访问时,需要service指定externalip,通过externalip:servicePort访问;
b)service的nodeport方式不安全,不使用nodeport暴露服务;
c)k8s系统服务也要用ingress暴露,不能使用ingress的nodeport需要在安全组增加策略,保证外部访问不到这些端口;
d)当需要给具体服务暴露给外网时,需要编辑service,新增一个端口,分配externalip和端口号,管理这个新的service、externalip:serviceport的对应关系;
e)编写一个定时任务,检测eip对应节点的网络,当节点notready时,选择一个ready的节点与eip对应,并修改所有外部访问服务的externalip,调用eip管理的api反馈给它能用的节点ip;
f)提供为一个service创建外部访问service的api,并初始化externalip和port,记录externalip:port与service的对应关系;
(3)ExternalIpController设计
a)K8s集群中有四种网络:管理网(nodeip)、业务网(podip和clusterip)、外部访问网(externalip)、存储网(cephip),这四种网络可以共用一个网卡,也可以使用单独网卡,生产环境建议使用单独网卡;
b)在k8s集群中规划externalip节点,用于提供外部访问能力,建议externalip节点至少两个,防止外部访问单点故障;
c)在k8s的集群中externalip节点部署externalipcontroller,用于绑定外部访问网卡,并保证外部ip的高可用;
d)externalip作为资源需要管理起来,提供获取externalip的api供服务使用,原则上一个服务(包括k8s服务和应用服务)分配一个externalip,externalip不是eip,是局域网ip,只用于k8s集群内部使用;
(4)Externalip管理
a)开发一个externalip的管理功能,通过界面管理externalip,提供增删改查功能;
b)提供给不同租户分配externalip的api,通过调用这个api,租户可以获得自己使用的externalip;
c)针对部署在虚机上的k8s集群,调用api获取的是暴露服务的nodeip;
(5)ExternalService管理
a)开发一个externalService的管理功能,通过界面管理externalip、端口号、服务名称、服务命名空间等信息,并提供增删改查功能;
b)提供给不同租户分配externalip和端口号的api,通过调用这个api,租户可以给具体服务分配externalip和端口号;
c)针对部署在虚机上的k8s集群,调用api获取的是暴露服务的nodeip和端口号。
表1 根据用户或eip获取可用的externalip
表2 请求参数
名称 |
类型 |
位置 |
必选 |
描述 |
user |
string |
url |
是 |
租户编号 |
eip |
string |
url |
是 |
eip编号 |
request url示例如下:
/apis/extensions/v1/externalips/available?user=zhangsan&eip=10.10.10.10
response示例如下: