应用服务网格

目标规则

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

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

 

BhYAwpjadzfH