Istio笔记之pilot
Istio笔记之pilot
一 基本概念
Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。
Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操作界面。
二 核心功能
- 服务发现
- 配置管理
三 服务发现流程
服务注册表:Pilot从平台获取服务发现数据,并提供统一的发现接口
服务发现:Envoy实现服务发现,动态更新负载均衡池。服务请求时使用对应的负载均衡策略将请求路由到对应的后端。
服务发现流程:service A访问service B出方向流量经过Proxy,proxy去请求Pilot servies拿到service b的服务地址以及负载均衡策略,然后发起请求,service b的入流量被service b伤的proxy拦截可以执行一系列的服务治理操作。proxy采用envoy和服务在一起,请求流量通过proxy, 但是service a访问其他service 是感知不到proxy
四 Pilot服务发现机制
- k8s的服务发现
我们都知道k8s其实是具备服务发现机制,svca访问svcb通过serviceip,然后请求到达node的kube-proxy上,kube-proxy又从kube-APIServer上获取集群其他service的后端backend示例,实现服务发现
共一个ns下可以直接短域名访问,跨ns,需要带上ns,service.namespace.svc.cluster.local
- Adapter机制,Pilot其中只有服务发现的定义,没有服务发现的实现,提供了适应与各种平台及其他服务发现组件的适配器 ,服务发现的实现位adapter对接的平台或这其他服务发现的后端。
- pilot基于kubernetes的服务发现,istio虽然具备可扩展性,能够结合其他服务发现组件,但是结合用户场景,其支持最好的还是kuberenets,在新版本istio会移除eureka的支持,在此为们着重研究pilot在kubernetes服务发现机制
- pilot实现若干服务发现的接口定义
- pilot的controller list/watch kubernetesAPIserver上service/endpoint等资源对象并转换pilot的标准格式
- envoy从pilot获取xDS,动态更新
- 当要服务访问时,envoy在处理outbound请求时,根据配置的LB策略,选择一个服务实例发起访问。
五 kubernetes与istio服务模型对比
istio的service就是k8s的service,istio对应的服务模型instance对应于k8s中的endpoint
istio的version对应于k8s中的deployment
六 istio应用架构在k8s上的实现
控制层面:pilot去list/watch k8s的apiservice,用户可以通过crd来通过istioctl或kubectl执行命令,获取etcd中的资源
数据层面:envoy拦截pod中的请求从pilot获取配置进行服务治理操作
七 Istio配置管理
- 配置:管理员通过Pilot配置服务治理规则
- 下发:Envoy从Pilot获取规则
- 执行:在流量访问的时候执行治理规则,在SvcA服务发起方的envoy中执行
八 Istio服务治理规则
8.1 VirtualService
服务访问路由控制,满足特定条件的请求路由到哪里,过程中治理,包括重写,重试,故障注入等
8.2 DestinationRule
目标服务的策略,包括目标服务的负载均衡,链接池管理
8.3 ServiceEntry 和gateway
九 Istio配置规则维护和下发流程
用户通过istioctl kubectl或者调用api操作crd来将治理规则下方到k8s中,存储在etcd中,pilot的configcontrolle一直去list/watch k8s的apiserver,Pilot的discoveryserver来从配置中拿到配置转换成envoy识别的规则,然后在envoy进行服务治理
十 Istio服务治理能力执行位置
- 点赞
- 收藏
- 关注作者
评论(0)