Kubernetes 可以方便的为容器应用提供了一个持续运行且方便扩展的环境,但是,应用最终是要被用户或其他应用访问、调用的。要访问应用pod,就会有以下两个问题:
-
pod是有生命周期的。它会根据集群的期望状态不断的在创建、删除、更新,所以pod的ip也在不断变化,如何访问到不断变化的pod?
-
通常一个应用不会单只有一个pod,而是由多个相同功能的pod共同提供服务的。那么对这个应用的访问,如何在多个pod中负载均衡?
service主要就是用来解决这两个问题的。简单来说,它是一个抽象的api对象,用来表示一组提供相同服务的pod及对这组pod的访问方式。
Service 提供了我们访问单个或多个容器应用的能力。每个服务在其生命周期内,都拥有一个固定的IP地址和端口。每个服务对应了后台的一个或多个Pod,通过这种方式,客户端就不需要关心Pod所在的位置,方便后端进行方便的Pod扩容、缩容等操作。
可以通过下面的示意图来理解Service的作用,图示如下:
由此可知,服务可以被外部的客户访问,也可以被内部的客户访问。Service通过创建时指定的标签选择器来决定用户的请求转发到后台的哪些Pods中。看一下Service创建的具体例子,内容如下:
[code]apiVersion: v1kind: Servicemetadata:name: tomcatlabels:name: tomcatspec:type: NodePortclusterIP: 10.111.176.152ports:- nodePort: 30001targetPort: 8080port: 8080protocol: TCPselector:name: tomcat
这个例子定义了一个Service名为tomcat-svc,端口为8080,该服务会将用户的请求转发到后台带有 name=tomcat 标签的Pods上,验证 Service 创建情况,命令如下:
[code] $ kubectl get svc
到此高可用负载均衡与外部服务(Service)介绍完成。
张志翔CSDN认证博客专家博客专家CSDN认证专家从事Java开发、嵌入式C、基础设施运维等工作,有丰富的微服务项目实战经验,参与云平台基础设施建设、部署实施及项目管理等。