一、destinationRule 和 VirtualService的联系和区别

1)两者之间的关系
在讲解virtualService中,路由目标对象destination中会包含Service子集的subset字段,这个服务子集就是通过DestinationRule定义的。

  1. 两者都是用于流量治理,那应用场景有什么区别?
    virtualService是一个虚拟的service,描述的是满足什么条件的流量被那个后端处理。类似于根据路径去匹配方法,是更开放的match条件。
    DestinationRule描述的是这个请求到达某个后端后怎么去处理,是方法内的处理逻辑。
    所以负载均衡和熔断策略是定义在DestinationRule中的,还可以配置连接池大小、异常实例驱逐规则等功能。

二、destinationRule配置示例

如图

定义了forecast服务的两个版本子集V1和V2,并对两个版本分别配置了随机和轮询负载均衡策略。

三、DestinationRule规则定义

重要属性如下:
1)host
必选字段,标识规则的适用对象,取值是服务注册中心中注册的服务名,可以是网格内或以serviceEntry方式注册的网格外的服务。
2)subsets
定义的服务子集,经常用来定义一个服务版本。
3)trafficPolicy
定义规则内容,包括负载均衡、连接池策略、异常点检查扥。
4)exportTo
控制在一个命名空间下定义的资源对象是否可以被其他命名空间下的sidecar执行。

未赋值,则默认全局可见。“.”表示仅应用到当前命名空间,“*”表示应用到所有命名空间。

1、trafficPolicy:流量策略
主要包括四个配置:
◎ loadBalancer:LoadBalancerSettings类型,描述服务的负载均衡算法。
◎ connectionPool:ConnectionPoolSettings类型,描述服务的连接池配置。
◎ outlierDetection:OutlierDetection,描述服务的异常点检查。
◎ tls:TLSSettings类型,描述服务的TLS连接设置。
此外,还包含一个PortTrafficPolicy类型的portLevelSettings,表示对每个端口的流量策略。

2、负载均衡设置(LoadBalancerSettings)
1)simple字段,提供的负载均衡算法如下:
◎ ROUND_ROBIN:轮询算法,如果未指定,则默认采用这种算法。
◎ LEAST_CONN:最少连接算法,算法实现是从两个随机选择的服务后端选择一个活动请求数较少 的后端实例。
◎ RANDOM:从可用的健康实例中随机选择一个。
◎ PASSTHROUGH:直接转发连接到客户端连接的目标地址,即没有做负载均衡。

配置示例如图:

2)consistentHash字段
高级的负载均衡策略,仅对http有效,原因是实现上基于HTTP Header、Cookie的值取hash。如:
◎ httpHeaderName:计算哈希的Header。
◎ httpCookie:计算哈希的Cookie。
◎ useSourceIp:基于源IP计算哈希值。
◎ minimumRingSize:哈希环上虚拟节点数的最小值,节点数越多则负载均衡越精细。
实例如下:

3 连接池设置 - ConnectionPoolSettings
Istio连接池管理在协议上分为TCP流量和HTTP流量治理
1)TCP连接池配置
◎ maxConnections:上游服务的所有实例建立的最大连接数,默认是 1024,属于 TCP层的配
置,对于 HTTP,只用于 HTTP/1.1,因为 HTTP/2对每个主机都使用单个连接。
◎ connectTimeout:TCP连接超时,表示主机网络连接超时,可以改善因调用服务变慢导致整个链路
变慢的情况。
◎ tcpKeepalive:设置TCP keepalives,是Istio1.1新支持的配置,定期给对端发送一个keepalive的探测包,判断连接是否可用。
实例如图:

最大连接数是80,连接超时是25毫秒,并且配置了TCP的 Keepalive探测策略。

2)http连接池配置
◎ http1MaxPendingRequests:最大等待 HTTP 请求数,默认值是 1024,只适用于HTTP/1.1 的服务,因为 HTTP/2 协议的请求在到来时会立即复用连接,不会在连接池等待。
◎http2MaxRequests:最大请求数,默认是1024。只适用于HTTP/2服务,因为HTTP/1.1使用最大连
接数maxConnections即可,表示上游服务的所有实例处理的最大请求数。
◎ maxRequestsPerConnection:每个连接的最大请求数。HTTP/1.1和HTTP/2连接池都遵循此参数。如果没有设置,则没有限制。设置为1时表示每个连接只处理一个请求,也就是禁用了Keep-alive。
◎ maxRetries:最大重试次数,默认是3,表示服务可以执行的最大重试次数。如果调用端因为偶尔
抖动导致请求直接失败,则可能会带来业务损失,一般建议配置重试,若重试成功则可正常返回数据, 只不过比原来响应得慢一点,但重试次数太多会影响性能,要谨慎使用。
不要重试那些重试了也总还是失败的请求;不要对那些消耗大的服务进行重试,特别是那些不会被取消的服务。
◎ idleTimeout:空闲超时,定义在多长时间内没有活动请求则关闭连接。

http一般和tcp设置配合使用,配置如下:

为forecast服务配置最大80个连接,只允许最多有800个并发请求,每个连接 的请求数不超过10个,连接超时是25毫秒

4 异常实例检测设置(OutlierDetection)
符合一般意义的熔断模型。

两种健康检查:
主动型的健康检查:定期探测目标服务实例,根据应答来判断服务实例的健康状态。如负载均衡器中的健康检查
被动型的健康检查:通过实践的访问情况来找出不健康的实例,如isito中的异常点检查。

异常实例检查相关的配置:
◎ consecutiveErrors:实例被驱逐前的连续错误次数,默认是 5。对于 HTTP 服务,返回 502、503 和 504 的请求会被认为异常;对于 TCP 服务,连接超时或者连接错误事件会被认为异常。
◎ interval:驱逐的时间间隔,默认值为10秒,要求大于1毫秒,单位可以是时、分、毫秒。
◎ baseEjectionTime:最小驱逐时间。一个实例被驱逐的时间等于这个最小驱逐时间乘以驱逐的次 数。这样一个因多次异常被驱逐的实例,被驱逐的时间会越来越长。默认值为30秒,要求大于1毫秒,单 位可以是时、分、毫秒。
◎ maxEjectionPercent:指负载均衡池中可以被驱逐的故障实例的最大比例,默认是10%,设置这个 值是为了避免太多的服务实例被驱逐导致服务整体能力下降。
◎ minHealthPercent:最小健康实例比例,是Istio 1.1新增的配置。当负载均衡池中的健康实例数的比 例大于这个比例时,异常点检查机制可用;当可用实例数的比例小于这个比例时,异常点检查功能将被 禁用,所有服务实例不管被认定为健康还是不健康,都可以接收请求。参数的默认值为50%。

实例如图:

5 端口流量策略设置
在端口上配置流量策略,且端口上流量策略会覆盖全局的流量策略。
关于配置方法与TrafficPolicy没有大差别,一个关键的差别字段就是 port
实例如图:

为forecast 服务配置了最大连接数 80,但是为端口 3002 单独配置了最大连接数100。

6 服务子集(Subset)
定义服务的子集。可以在VirtualService中使用。
重要属性:
◎ name:Subset的名字,为必选字段。通过VirtualService引用的就是这个名字。
◎ labels:Subset上的标签,通过一组标签定义了属于这个Subset的服务实例。比如最常用的标识服
务版本的Version标签。
◎ trafficPolicy:应用到这个Subset上的流量策略。

实例,给一个特定的Subset配置最大连接数:

Istio系列学习(八)----Istio的目标规则:DestinationRule相关推荐

  1. Istio系列学习(二)----Istio架构

    一.Istio的工作机制 Istio分为控制面和数据面. 控制面包含Pilot,Mixer,Citadel 数据面由伴随每个应用程序部署的代理程序Envoy组成. 1.自动注入 在创建应用程序时自动注 ...

  2. idou老师教你学Istio 04:Istio性能及扩展性介绍

    Istio的性能问题一直是国内外相关厂商关注的重点,Istio对于数据面应用请求时延的影响更是备受关注,而以现在Istio官方与相关厂商的性能测试结果来看,四位数的qps显然远远不能满足应用于生产的要 ...

  3. Istio系列学习(十四)----Istio策略适配器配置和Env适配器配置

    一.Istio策略适配器配置 Istio Adapter 机制的另外一个重要应用是策略执行. 策略执行Adapter 负责处理 Mixer 转发的 Check 请求,并将该请求分发给对应的策略执行后端 ...

  4. httos双向认证配置_idou老师教你学Istio 15:Istio实现双向TLS的迁移

    本文由华为云容器Istio团队撰稿,未经允许谢绝转载. 众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份 ...

  5. 05-【istio】-【istio介绍】istio的架构

    参考文章:<云原生服务网格Istio>第2章 Istio架构概述 - 云+社区 - 腾讯云 一.istio的架构 服务网格(istio是服务网格的一个产品)由两部分组成:数据平面.控制平面 ...

  6. 阿里巴巴硅谷 Istio 专家解读Istio 1.0 发布

    来源:阿里巴巴中间件 Istio 1.0 于北京时间8月1日0点正式发布!虽然比原本官网公布的发布时间晚了9个小时,但这并未影响到Istio在社区的热度. Istio 是 Service Mesh概念 ...

  7. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理

    本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...

  8. 【高并发】别闹了,这样理解Java的内存模型才正确(八种操作+同步规则)

    大家好,我是冰河~~ 最近冰河不是又出版了一本<深入理解高并发编程:核心原理与案例实战>一书吗?很多小伙伴对于Java的内存模型还是不太了解,今天,我就用最简短的篇幅结合八种操作和同步规则 ...

  9. dw中css目标规则命名,css 常用样式命名规则

    大家在写css的时候,对一些html标签起一个合适的名字是个很头疼的事情,现在给大家分享项目中常用的名字供参考. 外套:wrap  --用于最外层 头部:header  --用于头部 主要内容:mai ...

最新文章

  1. android route命令详解,route cmd命令详解
  2. 增强现实:一场正在到来的医疗革命
  3. 网络故障排除连载之七:设备兼容性故障排除
  4. python程序开发正则表达式_python正则表达式的使用(实验代码)
  5. uCOS-II任务建立示例
  6. linux下kegg注释软件,KEGG数据中全部代谢反应和代谢物注释信息的下载
  7. 三、fs文件操作模块
  8. hdoj 1114 Piggy-Bank(完全背包+dp)
  9. 2016NOI冬令营day4
  10. Titanium快速开发app
  11. .NET Framework高低版本兼容问题解决办法
  12. 分销商城平台开发现成源码
  13. wmic memorychip
  14. IDEA 集成Statistic插件
  15. week9 day1 HTML简介和常用标签
  16. 文件在另一个程序中打开,无法删除~【删除文件被占用问题】(保姆级教程,五种解决办法~)
  17. DataGridView中某一行的某一列及当前行的选取方法(C#实现)
  18. P-Link ARM Cortex-M脱机编程器开源前的一些准备工作----第四章 几个重要的结构体介绍
  19. matplotlib 怎么画核密度
  20. 竞争优势究竟是什么?

热门文章

  1. LD 文件:规则详解
  2. OPNET网络仿真--陈敏教授--2.5 包交换例程
  3. 省级面板数据(2000-2019)一:行政区划+单位法人数(stata版)
  4. Eclipse使用Maven
  5. bilibili-download 哔哩哔哩视频下载器(批量下载专栏视频)
  6. 单片机c语言对应的数据类型有,单片机C语言数据类型.doc
  7. android播放器竖屏,Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换...
  8. Python实现输入三个整数x,y,z,请把这三个数由小到大输出
  9. java计算机毕业设计WEBOA办公信息管理系统源码+数据库+系统+lw文档
  10. 服务器主板坏了怎么维修,服务器主板坏了导出数据库