概述
目标规则(DestinationRule)定义了服务分组以及请求选定了路由之后,sidecar对上游服务请求的行为,例如负载均衡、连接池大小、故障节点剔除等策略,本文说明如何创建、修改、删除目标规则。
创建目标规则
- 登录服务网格控制台,选择流量管理中心 > 目标规则菜单,选择相应的命名空间。
- 页面左上角选择使用YAML创建,当前提供了不同的场景配置模板。
- 可以基于模板修改,或者根据自己的需求编辑配置。
修改目标规则
- 进入服务网格控制台,选择流量管理中心 -> 目标规则菜单,选择相应的命名空间。
- 页面会展示当前所选命名空间下的目标规则列表,右侧操作栏选择编辑操作。
- 修改完成后提交即可。
删除目标规则
- 进入服务网格控制台,选择流量管理中心 -> 目标规则菜单,选择相应的命名空间。
- 页面会展示当前所选命名空间下的目标规则列表,右侧操作栏选择删除操作。
目标规则资源配置示例及关键字段说明
下面目标规则定义了bookinfo ratings服务的默认负载均衡策略为LEAST_REQUEST,同时定义了一个版本子集testversion,对应服务的标签是version: v3,对于testversion版本定义了独立的负载均衡策略是ROUND_ROBIN。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host:
ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_REQUEST
subsets:
- name: testversion
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
上面的例子可以看到目标规则可以定义服务的负载均衡策略、版本分组策略等,具体的配置说明如下:
DestinationRule
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
host | string | Yes | 该目标规则应用的服务名称。 |
trafficPolicy | TrafficPolicy | No | 流量策略(负载均衡、连接池、故障节点剔除等)。 |
subsets | Subset | No | 服务子集(流量策略可以在服务子集粒度定义,并覆盖全局策略)。 |
exportTo | string | No | 定义了当前目标规则暴露给哪些命名空间,用于控制目标规则的可见性,默认所有命名空间可见。 |
workloadSelector | WorkloadSelector | No | 选择当前目标规则应用的工作负载。 |
TrafficPolicy
定义了请求后端服务具体的流量策略(服务级或者端口级策略)。
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
loadBalancer | LoadBalancerSettings | No | 负载均衡算法。 |
connectionPool | ConnectionPoolSettings | No | 对上游服务的连接池配置。 |
outlierDetection | OutlierDetection | No | 故障节点剔除策略。 |
tls | ClientTLSSettings | No | 请求上游服务的tls策略。 |
portLevelSettings | PortTrafficPolicy | No | 端口级流量策略。 |
tunnel | TunnelSettings | No | 请求目标服务的隧道配置;只能应用在TCP和TLS路由场景,不能用于HTTP。 |
Subset
服务子集通过标签选择器在服务内选定一个子集,目标规则内可以定义多个子集;通过再虚拟服务中根据匹配规则引用不同的子集,可以实现AB实验、灰度发布等功能。子集内可以定义独立的流量策略(覆盖服务级策略),子集配置说明如下:
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
name | string | Yes | 子集名称,在虚拟服务里通过名称引用指定子集。 |
labels | map<string, string> | No | 子集标签过滤规则,匹配这些标签的服务节点才会被纳入当前子集。 |
trafficPolicy | TrafficPolicy | No | 子集的流量策略集成自服务级策略,子集内定义的流量策略将覆盖服务级策略。 |
LoadBalancerSettings
定义了请求后端服务的负载均衡策略,字段说明如下:
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
simple | SimpleLB(枚举) | No | 可选值为UNSPECIFIED,RANDOM,PASSTHROUGH,ROUND_ROBIN,LEAST_REQUEST,LEAST_CONN。 |
consistentHash | ConsistentHashLB(枚举) | No | 基于HTTP头部、Cookie等属性提供亲和性负载均衡配置。 |
localityLbSetting | LocalityLoadBalancerSetting | No | 基于请求源和目标的地域的调度策略。 |
warmupDurationSecs | Duration | No | 服务预热时间配置,用于新的节点加入并且需要预热的场景;当前只支持ROUND_ROBIN和LEAST_REQUEST负载均衡策略。 |
ConnectionPoolSettings
对上游服务的连接池设置,应用在上游服务的每个节点;配置说明如下:
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
tcp | TCPSettings | No | 定义了TCP的最大连接数,连接超时时间,TCPKeepAlive等配置。 |
http | HTTPSettings | No | 定义了HTTP连接池相关配置。 |
OutlierDetection
该配置实现了剔除上游故障节点(熔断)的功能,支持对TCP和HTTP服务进行熔断,主要基于连接超时、失败,HTTP状态码等统计失败情况进行熔断,具体配置如下:
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
splitExternalLocalOriginErrors | bool | No | 是否将本次检测到的错误纳入熔断统计,默认为false; 设置为true时,consecutive_local_origin_failure值将被纳入错误统计。 |
consecutiveLocalOriginFailures | UInt32Value | No | 剔除异常节点前本地检测到的连续错误次数。 |
consecutiveGatewayErrors | UInt32Value | No | 剔除异常节点前检测到的连续网关错误次数(HTTP 502、503、504)。 |
consecutive5xxErrors | UInt32Value | No | 剔除异常节点前检测到的连续5XX次数。 |
interval | Duration | No | 异常情况统计时间窗口(必须大于1ms,默认为10s)。 |
baseEjectionTime | Duration | No | 故障节点被剔除的最短时间,默认为30s。 |
maxEjectionPercent | int32 | No | 上游所有节点中最大可以剔除多少比例的节点。 |
minHealthPercent | int32 | No | 故障节点剔除策略生效的最低健康节点比例,监控节点比例低于该值时,故障剔除策略将失效。 |