Service Discovery指自动发现设备或在网络中的服务,例如蓝牙设备搜索,DNS服务发现,微服务注册发现等
在服务资源前添加loadbalancer(或反向代理),这个lb的外部地址通常是固定的,由这个lb在分发请求,实例通过向Service Register新增或删除信息来更新当前的资源状况。Service Register向其他服务资源提供当前的资源信息,用以更新路由规则。
优点:对客户端隐藏了实现细节
缺点:引入了loadbalancer组建,增加了系统故障风险,lb组件可能成为系统的性能瓶颈,该lb需要支持client与server之间的所有网络协议,增加了一次网络路由节点
相对于server-side的方式,一处了loadbalancer组件,转而由client从service-register获取实例清单,并自行选择本次请求的目标实例地址。
优点:无需引入多余的组件
缺点:将client和service register耦合在一起,增加了client的负复杂度
client需要实现负载均衡相关的算法,对client具有侵入性,尤其是考虑client可能是由多种语言实现时,则需要每种语言都实现一次
通过标准DNS也可以实现服务发现,使用DNS服务器为同一个服务域名配置多个ip地址,通过Round-Robin或其他规则选取服务ip。但这种方式有明显的缺点。
前提: 已经对kubernetes中的POD,SERVICE,NODE等基本概念有所了解
Control-plane:就服务发现来说,控制节点的作用类似于注册中心,负责借口新建的pod网络信息并存储到etcd中。同时通知其他已存在的节点当前新建或更新的节点网络信息
Node:从网络路由的角度来说,Node可以视为虚拟机,我们的服务就运行在Node上,而kube-proxy是运行在node上的一个网络代理组件,由它监听Control-plane状态和信息更新
Service:同一类POD运行的服务的集合,是一个抽象的概念,每一个service都会被分配一个clusterip
DNS add-on:DNS插件,打开的情况下,可以为每一个service分配一个有效的DNS记录
大致可以把kubernetes中的一次数据请求分为以下几个步骤:
kube-proxy负责将Control-plane中关于Service pod的网络信息编织成路由规则到node上,而随后pod中针对目标service的请求,就会被路由规则所代理转发到目标位置。也就是说,kubeproxy充当了client-side模式中的路由插件,只是不需要由服务自行实现,而是采用了流量代理的模式在外部实现,这样可以避免对服务的侵入性,同时增加了独立性与通用性。kube-proxy不仅实现了路由,还支持负载均衡。目前主要有以下几种实现方式。
kubernetes中,通过service cluster ip,DNS add-on,kube-proxy整合的方案,同时兼具了传统client-side和server-side的优势,同时规避了相应的缺点。
What is Service Discovery, wiki
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。