Kubernetes权威指南

1.4kubernetes基本概念和术语(4) -- servi

2020-03-19  本文已影响0人  ZYvette

欢迎各位读者评论留言,共同学习,共同进步。
《kubernetes权威指南》笔记
1.4kubernetes基本概念和术语(1)
1.4kubernetes基本概念和术语(2)
1.4kubernetes基本概念和术语(3)

8.Service

Q1: 客户端如何访问service?

配置文件使用:


image.png

targetPort: 在spec.ports的定义中,targetPort属性用来确定提供该服务的容器所暴露(EXPOSE)的端口号,即具体业务进程在容器内的targetPort上提供TCP/IP接入;
port: port属性则定义了Service的虚端口。前面定义Tomcat服务时没有指定targetPort,则默认targetPort与port相同

Q2: 多端口为什么要定义多个端口名?服务发现机制是什么?
Q3:外部系统如何访问serice?

实际访问是通过NodeIp+NodePort.
a. NodePort的实现方式是在Kubernetes集群里的每个Node上都为需要外部访问的Service开启一个对应的TCP监听端口,外部系统只要用任意一个Node的IP地址+具体的NodePort端口号即可访问此服务。
b. 负载均衡问题:假如在我们的集群中有10个Node,则此时最好有一个负载均衡器,外部的请求只需访问此负载均衡器的IP地址,由负载均衡器负责转发流量到后面某个Node的NodePort上。

image.png

Load balancer组件独立于Kubernetes集群之外,通常是一个硬件的负载均衡器,或者是以软件方式实现的,例如HAProxy或者Nginx。对于每个Service,我们通常需要配置一个对应的Load balancer实例来转发流量到后端的Node上,这的确增加了工作量及出错的概率。于是Kubernetes提供了自动化的解决方案,如果我们的集群运行在谷歌的公有云GCE上,那么只要把Service的type=NodePort改为type=LoadBalancer,Kubernetes就会自动创建一个对应的Load balancer实例并返回它的IP地址供外部客户端使用。其他公有云提供商只要实现了支持此特性的驱动,则也可以达到上述目的。此外,裸机上的类似机制(Bare Metal Service Load Balancers)也在被开发。

总结: 外部客户端请求-- 通过load balancer (如nginx) --> 分配一个Node IP ,根据Node Port 访问 k8s某个Node 节点 --> Node IP 通过 Cluster Ip ,找到集群对应Pod(注意是整个集群中的Pod,而非某个Node上的Pod) --> 通过kube-proxy 从service 转发到后端某个Pod实例上。

image.png
上一篇 下一篇

猜你喜欢

热点阅读