华为云讲解:2. Istio Pilot 与服务发现

文章目录

  • 华为云讲解:2. Istio Pilot 与服务发现
    • 服务发现
        • 看图说话 在Istio里面Service A 访问ServiceB 如何做到的
      • 服务发现的实现
      • Istio 结合Kubernetes 做服务发现
        • 总结
    • 配置管理
    • 流量规则
      • VirtualService
      • DestinationRule
      • ServiceEntry && Gateway
    • 规则下发流程
    • 规则定义
    • 规则执行位置
    • Kubernetes & IS stio结合
    • 服务发现 Istio 比较Spring cloud

主要点Pilot

Pilot 与“数据面”交互完成服务发现和配置管理的。

服务发现

写一个a.app 名字就导入了一个后端但是我们不知道这个后端服务是88还是99。虽然在微服务讲服务发现说的很多,但是这是做微服务的基本手段,如果只是一个单体的应用,或者两个很简单的应用,都可以不用服务发现。

结合springCloud的服务注册发现 XYZ Service 访问ABCservice的时候,ABCservice先把自己的信息放Service Registration,也就是EurekaServer。然后服务调用者 XYZ Service 手里有个Eureka cilent 去Service Registration拿到服务发现的信息,根据负载均衡策略ribbon访问真正的实例。

看图说话 在Istio里面Service A 访问ServiceB 如何做到的

首先ServiceA 出口流量先被Proxy 拦截掉,Proxy会链接服务发现的地址 Pilot,从上面拿到对应服务发现的数据,就是服务实例的应用关系,同时也会拿到一个负载均衡策略,然后访问ServiceB ,如果ServiceB 有若干个实例,图中有三个实例,根据负载均衡策略访问到对应的ServiceB 副本,当然在访问到ServiceB 的容器的时候是先进入ServiceB 的Proxy。

可以看出无论什么架构的服务发现都几乎一样

Service Mesh服务发现架构特点,因为Service和Proxy在一起的,Proxy会把所访问Service的流量都给他拦截,但是Service本身感知不到Proxy的存在,在访问特别频繁特别密集的时候,提供给这种方式,对服务之间的访问治理是非常有用的,因此也是基于这种思路这种架构设置做它的功能的。

底层实现

Pilot里面有两个东西一个是Abstart Model,另一个是 Platform Adapter,

Abstart Model是存放各种服务信息

Platform Adapter,可以适配各种平台服务发现比如Eureka

服务发现的实现

Pilot 里面有个ServiceControllter,这个里面有个Eureka Cilent ,Eureka Cilent 去真正的Eureka Server 服务拿到服务列表 ,Discoveryserver维护成服务发现数据,然后通过rpc 接口提供给Envoy使用

Eureka由于不在维护,在Istio1.0之后的版本Pilot的Eureka Cilent 已经被干掉了

Istio 结合Kubernetes 做服务发现

结合基于Eureka 的例子,我们可以看出也是通过ServiceControllter通过List/Watch的方式去ApiServer 拿去到服务数据,然后Discoveryserver维护成服务发现数据,然后通过rpc 接口提供给Envoy使用,当访问出口请求的时候根据对应的负载均衡策略选择一个服务实例发起访问。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvow5nbZ-1581741461373)(https://gitee.com/zhangchengji/kubeSource/raw/master/image/image-20200213160855225.png)]

虽然有个platform Adapter 可以适配各种平台但他支持最好的就是kubernets, 看图其实Istio service 就是k8s的service,一个版本把流量导入到另一个版本这样做灰度发布在Istio其实很简单。

K8s 的服务发现也是通过kube-proxy 去apiserver 拿到对应服务列表信息,访问到具体的服务的。K8s 本身也是有服务发现的机制的。

Istio的服务发现其实通过Pilot去k8s的apiserver,然后取的etcd的配置数据,然后 通过Pilot下发到Envoy。从这张图中可以看出k8s和Istio是非常紧密的关系,只要Istio有的功能都是基于k8s构建的。

总结

Pilot 基于提供的Platform Adapter机制做服务发现,可以适配各种不同的后端,当前支持最好的k8s

配置管理

在这里Pilot 作为一个规则维护的角色,用户下发规则到Pilot ,然后通过Proxy根据规则,图中的例子说灰度发布一个场景,99% 流量到v1.5版本,1%到v2.0版本,是在服务发起方就决定的这个规则调用,而不服务访问方。

流量规则

  • VirtualService
  • DestinationRule
  • ServiceEntry
  • Gateway

VirtualService

VirtualService 其实就是一个Service,一个调用方满足什么样的条件,就路由到对应服务版本。满足什么样的条件去什么地方。包括在这个过程中进行服务的一下治理包括重写重试,故障注入等。

VirtualService 支持三种协议 http 七层协议控制东西更多,tls ,tcp。

VirtualService 流量规则:

  • match
  • route
  • Redirect
  • Timeout
  • Rearies
  • Fault
  • Mirror

VirtualService做到工作就是一个服务怎么被访问,访问规则。满足条件访问什么样的服务,访问的时候做一些控制。

DestinationRule

DestinationRule 目标规则

服务治理:负载均衡,熔断容错,目标流量管理,最大连接等等,非常广泛

DestinationRule 是对目标配置一定规则,比如负载均衡策略

关键字TrafficPolicy 流量策略里面有很多定义比如loadBalancer connectionPool数据库连接数 outlierDetectio异常链检查 tls配置等,比如我但是我的服务访问过大配置一个最大连接数,担心服务出现故障配置一个重试机制,配置一个超时机制,等等保证我的服务不会被请求太多,而请求挂掉这些东西都是定义在DestinationRule。

它还可以对pod定义一些规则

DestinationRule配合VirtualService可以把服务治理放大最大化。一个服务怎么被访问一个服务怎么去治理怎么去控制有一个完整的描述。 这个东西不应该叫配置更应该叫描述文件。

ServiceEntry && Gateway

ServiceEntry

打个比方一个服务访问ServiceMesh外面的服务,假设这个服务他不在集群中,肯定不能注册的,比如访问外面的mysql ,mysql不一定在哪里装着只有一个地址,但是mysql 访问我也想做一些服务治理,就像访问内部服务一样。比如看一下为什么访问慢,可以把它调用链加到ServiceEntry,ServiceEntry就可以把它加入到服务发现中了,就可以进行治理了。

Gateway

功能就是类似于Ingress nginx 服务暴露,也就是说可以把ServiceMesh的服务发布成外部一个可以访问的服务。

规则下发流程

在k8s 里面如何下发规则进行治理的。

流程:

用户通过kubectl 调用ApiServer进行配置一些crd(资源规则)比如VirtualService、DestinationRule等,把这些规则写入到etcd ,然后Pilot里面有个ConfigController他一直list-watch这些资源对象拿到之后, 然后RPC 服务DiscoverServer去取到资源数据,转换成Envoy能识别的规则,Envoy拿到这个规则进行服务治理。

规则定义

在Istio的定规则是长左边这样,在Envoy就长右边这样。如下图:

满足这样条件走v2其他走v1,

Envoy通过Istio定义的描述转成自己的描述,但是Envoy自己也有自己的规则描述

规则执行位置

大部分规则都是配置在服务提供方的,而规则的执行都是服务发起方

Kubernetes & IS stio结合

微服务运行在容器里面而编排工具是k8s已经是业界的标准,而微服务治理使用Istio。

服务发现 Istio 比较Spring cloud

  1. Istio基于k8s的数据 来做的,这样它里面的数据跟k8s都是一致的。

  2. 治理规则:治理规则基于k8s,无需专门的配置服务器管理服务,

而spring cloud必须要有配置中心模块,不在乎配置长什么样,只要往里写,就可以对接后端存放下来,提供通道,把config刷到SDK上面,而在IStio里面这些工作都不需要做,只要一个配置其他东西都有了,0工作量。跟k8s一样只要定一个规则配置yaml就可以。

  1. 服务发现的方式:无需专门服务注册,他是取k8s server的服务数据

比较

  1. 服务注册:首先必须要做注册服务器,微服务起来必须连接服务注册中心(Eureka),把自己的地址汇报上去。
  2. 服务发现方式:每个服务必须要写服务的注册地址,获取到要连接服务信息地址。注册的时候写把服务注册到哪里,服务发现的时候就要写从哪里连接地址。拿下来做服务发现,然后做访问。
  3. 致命问题:服务发现不一致:springcloud的服务注册中心(Eureka)和k8s apiserver是两个服务发现的通道,Eureka在k8s 完全不用,而是用自己的。k8s容器化部署后服务比较轻量,但是运行服务的节点会经常变的,也就是我们常说的漂移,如果死掉就会重新调度,说不定就调度到别的节点上去。这样服务的IP就变了,但是出现这种情况注册中心的地址并没有更新新地址,还是老地址,导致服务访问对应服务的时候就是访问的老地址。就访问不同了。
  4. 治理规则:治理规则和服务注册一起,获取单独的配置服务

华为云讲解:2. Istio Pilot 与服务发现相关推荐

  1. 华为云讲解:1. Istio架构与原理

    华为云讲解:Istio架构与原理 文章目录 华为云讲解:Istio架构与原理 Service Mesh Kubernetes Istio 架构基础 Istio 基本概念 Istio & Kub ...

  2. 用云原生的思维践行云原生,华为云深耕数字化,一切皆服务

    [中国,深圳,2021年9月23日] 华为全联接2021于9月23日开幕.华为轮值董事长徐直军进行了"以持续创新加快数字化发展"的主题演讲,发布业界首个分布式云原生产品--华为云U ...

  3. 华为云开天aPaaS 上线,服务千万开发者,使能行业场景化创新

    摘要:9月25日,华为云在华为全联接2021发布四大生态策略,并宣布2022年投入1亿美元升级沃土云创计划.华为云开天aPaaS正式上线,实现经验即服务,使能行业场景化创新. 本文分享自华为云社区&l ...

  4. 华为云硬盘备份(VBS)服务

    华为云硬盘备份(VBS)服务,可为云硬盘创建备份,利用备份数据回滚云硬盘,最大限度保障用户数据的安全性和正确性,确保业务安全. 通过云硬盘备份服务,可以将创建备份的那一个时间点的云硬盘数据完整保存下来 ...

  5. 软件成分分析:华为云重磅发布开源软件治理服务

    摘要:软件成分分析,指通过对软件源码.二进制软件包等的静态分析,挖掘其所存在的开源合规.已知漏洞等安全合规风险,是一种业界常见的安全测试手段. 本文分享自华为云社区<华为云重磅发布开源软件治理服 ...

  6. #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?

    在Java 的世界里,配置的事情都交给了 Properties,要追溯起来这个模块还是从古老的JDK1.0 就开始了的. "天哪,这可是20年前的东西了,我居然还在用 Properties. ...

  7. java怎么实现华为云文字识别,OCR文字识别服务快速入门教程

    [入门介绍]OCR服务快速入门汇总 1.[快速入门 01] 申请华为文字识别服务 现阶段,华为文字识别服务处于公测阶段,需要先申请公测,再申请开通服务,具体操作步骤如下: 步骤1       申请华为 ...

  8. 华为云 Fusion Insight 可信智能计算服务让数据可信流通

    中小微企业为申请银行贷款跑断腿?税务.人社.住建.水.电等,为了给企业有更好的信用建模,需要向不同的机构 申请不同维度的数据,流程冗长复杂,让人望而生畏. 探索和发现新的药物,需要结合多家医疗和科研机 ...

  9. 华为云CDN加速多场景多服务,为你一键加速

    在当代社会,互联网技术的发展和轻办公方式和电商行业.直播行业等的逐渐流行,让整个社会出现了数据信息爆炸的现象,正是因为多种数据的增长导致了很多用户会出现下载速度缓慢.网络加载速度过慢甚至崩溃.观看直播 ...

最新文章

  1. SpockFS —— 基于 HTTP 的文件系统
  2. shell脚本编程学习之路-shell数组
  3. 成功解决AttributeError: module 'tensorflow.python.ops.nn' has no attribute '_seq2seq'
  4. P1305 新二叉树
  5. LambdaNetworks解读
  6. 雷军 1994 年写的代码,经典老古董。
  7. instagram架构_如何创建像Instagram这样的照片共享应用程序:基本知识。
  8. vue4 跳转外部链接_vue跳转到外部链接
  9. jQuery基本选择器 (实例及表单域 value 的获取)
  10. goland设置代码颜色主题(同Sublime Text 3的代码颜色一样)
  11. 解决PyCharm出现无法连接Docker的问题
  12. CAN协议要点及车辆CAN协议破解
  13. JS显示当前时间(包含农历时间)
  14. 轻松编写您自己的拖拉机算法,进行算法大战
  15. ES6 Javascript Nodejs Mindmap
  16. 古训良言 之 一百四十八
  17. 在vsphere client 给esxi上的虚拟机增加U盘识别
  18. 咪咕版kindle利用“隐藏浏览器”打开微信读书
  19. 都说ScreenToGif是GIF录制神器,却不知其强大之处远不在此
  20. 信捷plc485通信上位机_上位机开发之三菱FX3U以太网通信实践

热门文章

  1. matlab covm,biosig4octmat-2.88 Matlab 脑电信号转mat数据工具包, 研究的福音。 238万源代码下载- www.pudn.com...
  2. Ringbuff note
  3. win10系统打印机服务器在哪个文件夹,Win10打印机在哪添加和设置 Win10设备和打印机在哪?...
  4. php函数大全 笔记,PHP的String函数笔记
  5. 【Spire.PDF】Spire.PDF导出报告之一获取与破解
  6. 当代世界顶级彩铅牛人的画作,每一副仿佛照片一样逼真!
  7. 如何采集微信公众号历史数据
  8. matlab butter stop,Matlab butter函数设计滤波器
  9. 软件测试真的不好就业吗?
  10. gyp: No Xcode or CLT version detected!问题解决