Istio DestinationRule
DestinationRule配置要点
- DestinationRule用于配置路由完成之后的应用于服务的流量策略,即配置如何将流量调度至上游端点,同时也是为VirtualService的Destination指定的目标提供具体的定义和实现;主要包括以下配置项
-
负载均衡配置
-
Sidecar连接池
-
异常值检测相关的配置,即异常端点驱逐机制
-
-
DestinationRule的关键字段
- host:必选字段,指定规则的适用对象,可以使用短域名;可用值是在服务注册中心注册的服务名,即网格内的服务或者是以ServiceEntry注册的网格外的服务;
-
trafficPolicy:具体的规则内容,包括负载均衡、连接池策略和异常值检测;
-
subsets:服务的子集定义,通常一个子集用于定义一个服务版本;
- exportTo:用于控制DestinationRule跨名称空间的可见性,即控制一个名称空间下定义的DestinationRule资源对象是否可被其它名称空间下的Sidecar执行;
-
“.”:表示仅应用于当前名称空间;
-
“*”:表示应用于所有名称空间;
-
-
Subset:服务子集
-
name:子集名称、
-
labels:子集上的标签
-
trafficPolicy:应用于当前子集的流量策略
-
-
TrafficPolicy主要包含如下几项重要配置
-
loadBalancer:定义使用的负载均衡器,即负载均衡算法;
-
简单负载均衡:
-
ROUND_ROBIN、LEAST_CONN、RANDOM和PASSTHROUTH
-
- 一致性哈希:consistentHash仅对HTTP协议有效,它支持基于httpHeaderName、httpCookie、useSoureIp进行hash计算,并能够通过minimumRingSize指定Hash环大小;
-
httpHeaderName
-
httpCookie
-
useSourceIp
-
httpQueryParameterName
-
minimumRingSize
-
-
localityLbSetting:位置权重负载均衡相关的设置,基于Client和Server端Pod上的annotation时设置
-
常用参数:distribute、failover、failoverPriority、enabled
-
常用Annotation:topology.kubernetes.io/region、topology.kubernetes.io/zone、topology.istio.io/subzone
-
-
-
outlierDetection:异常值检测;
-
consecutiveErrors:实例被驱逐前的连续错误次数和,默认值为5;
-
interval:驱逐的时间间隔,默认值为10秒,支持以时、分、秒和毫秒为单位;
-
baseEjectionTime:基准驱逐时长,具体时长取决于退避算法;
-
maxEjectionPercent:可被驱逐的最大实例比例,默认为10%;
-
minHealthPercent:启用异常值检测时要满足的最小健康状态实例比例,小于此比例,异常值检测将被禁用;默认为50%;
-
-
connectionPool:连接池配置
-
TCP连接池配置:
-
maxConnections:为上游服务的所有实例建立的最大连接数,默认为1024;
-
connectTimeout:TCP连接超时时长;对于HTTP协议来说,它仅适用于HTTP/1;
-
tcpKeepalive:TCP keepalives机制,通过定期给发送一个keepalive探测报文来判断连接是否可用;
-
-
HTTP连接池配置
-
http1MaxPendingRequests:允许挂起的最大HTTP请求数,默认为1024,仅适用于HTTP/1.1;
-
http2MaxRequests:允许的HTTP/2最大请求数,默认为1024;HTTP/1.1的由maxConnections设置即能实现;
-
maxRequestsPerConnection:每连接的最大请求数,默认为无限制,而1则表示禁用Keep-alive;
-
maxRetries:最大重试次数,默认为3;
-
idleTimeout:空闲超时时长;
-
-
-
PortTrafficPolicy:流量策略要应用的目标端口;
-
DestinationRule配置生效示意图
DestinationRule CRD
DestinationRule配置示例
子集示例
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: demoapp
spec:
host: demoapp
subsets:
- name: v10
labels:
version: v1.0
- name: v11
labels:
version: v1.1
负载均衡
kind: DestinationRule
metadata:
name: demoapp
spec:
host: demoapp
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
subsets:
- name: v10
labels:
version: v1.0
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: X-User
- name: v11
labels:
version: v1.1
示例三
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
subsets:
- name: testversion
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
参考文档
https://istio.io/latest/zh/docs/reference/config/networking/destination-rule/