service
service是一类pod的抽象,在一个k8s集群中,不同的pod会提供不同的服务,例如,一些典型的应用中通常会包括前端服务和后台服务。这个时候,我们会把前端服务和后台服务定义为两个服务。通常,每一类服务都包含若干个相同的pod(除了服务更新的时候)。一类pod会统一的对外提供一类服务。
服务间的通信
1.pod的ip地址通常是会因为pod的销毁和生成不断变化的,如果前段pods和后端pods是直接使用各自pod的ip地址来进行通信的,那么这个显然是行不通的。服务的这一抽象概念的使用,让互相访问的前端pods和后端pods进行了松耦合。Kubernete原生的应用,都提供了一个Endpoint API,它的作用是当一个服务中的pod发生变化时,Endpoints API随之变化,持续的跟踪pod的变化,那么访问服务的请求就不需要知道具体的pod的ip地址。而只需要和Endpoint API交互就好了。那些非原生的程序,Kubernetes提供了一个基于虚拟IP的网桥服务,请求会通过网桥转发到对应的后台pod。
服务的端口问题
一类运行着相同服务的pod,其暴露的端口通常也是一样的。在服务的层面上,这一些端口一般都会起一个名字,其他的服务只需要知道当前服务的服务端口名就可以和当前服务通信,不用关心具体的pod暴露的端口号是多少。这样也带来了管理上的便捷,如果我们后期修改pod中暴露的端口号,这样是不会影响其他服务和当前服务的通信。
一个定义服务的配置
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
以上脚本定义了一个服务,该服务的服务名是my-service,选择器是my-select,将80端口映射给9376端口。
该部分下期续------>
领取专属 10元无门槛券
私享最新 技术干货