应用服务网格

目标规则

2025-08-13 09:24:50

目标规则(DestinationRule)定义了服务分组以及请求选定了路由之后,sidecar对上游服务请求的行为,例如负载均衡、连接池大小、故障节点剔除等策略;本文说明如何创建、修改、删除目标规则

创建目标规则

1.登录服务网格控制台,选择流量管理中心 -> 目标规则 菜单,选择相应的命名空间 

2.页面左上角选择使用YAML创建,当前提供了不同的场景配置模板

3.可以基于模板修改,或者根据自己的需求编辑配置

修改目标规则

1.进入服务网格控制台,选择流量管理中心 -> 目标规则菜单,选择相应的命名空间 

2.页面会展示当前所选命名空间下的目标规则列表,右侧操作栏选择编辑操作

3.修改完成后提交即可

删除目标规则

1.进入服务网格控制台,选择流量管理中心 -> 目标规则菜单,选择相应的命名空间

2.页面会展示当前所选命名空间下的目标规则列表,右侧操作栏选择删除操作

目标规则资源配置示例及关键字段说明

下面目标规则定义了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

可选值为UNSPECIFIEDRANDOMPASSTHROUGHROUND_ROBINLEAST_REQUESTLEAST_CONN

consistentHash

ConsistentHashLB (枚举)

No

基于HTTP头部、Cookie等属性提供亲和性负载均衡配置

localityLbSetting

LocalityLoadBalancerSetting

No

基于请求源和目标的地域的调度策略

warmupDurationSecs

Duration

No

服务预热时间配置,用于新的节点加入并且需要预热的场景;当前只支持ROUND_ROBINLEAST_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 502503504

consecutive5xxErrors

UInt32Value

No

剔除异常节点前检测到的连续5XX次数

interval

Duration

No

异常情况统计时间窗口(必须大于1ms,默认为10s)

baseEjectionTime

Duration

No

故障节点被剔除的最短时间,默认为30s

maxEjectionPercent

int32

No

上游所有节点中最大可以剔除多少比例的节点

minHealthPercent

int32

No

故障节点剔除策略生效的最低健康节点比例,监控节点比例低于该值时,故障剔除策略将失效