isito是如何实现服务发现的?
在开始了解istio是如何实现服务发现之前,我们先了解下K8S中的服务发现与istio的服务发现的不同处
(一)Kubernetes服务发现
K8S中实现服务发现是通过Service基于每个节点的Kube-Proxy组件向Kube-apiserver获取Service及其后端Endpoint信息,Endpoint负责记录Service对应后端的所有Pod IP地址,当有请求到达SVC时,SVC会从Endpoint当中选取Pod来处理该请求
(二)istio服务发现
istio几乎复用了K8S中的服务发现模型,istio通过Kube-apiserver获取Service和Endpoint信息,将其转化为自身的服务模型,但其数据面组件不再是Kube-Proxy组件,而是每个Pod中的SideCar,也可以看作是每个服务实例中的Proxy
两者的不同之处:
K8S当中是通过Kube-Proxy组件向Kube-Apiserver获取SVC和Endpoint信息的,但istio是通过Kube-apiserver来获取SVC和Endpoint信息后将其转化为istio自身的服务模型
K8S的负载均衡能力是基于OSI七层模型中的4层负载能力,即 不能基于应用层的请求(如特定的URL、cookie、特定的请求头部信息)进行负载均衡,但istio的负载均衡能力是基于OSI七层模型中的7层负载能力,能够实现基于应用层的请求进行负载均衡
PS:istio的服务发现既可以基于第四层实现服务发现,也可以通过第七层实现服务发现,但第七层服务发现是建立在第四层的基础之上

浙公网安备 33010602011771号