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/

posted @ 2022-10-26 15:34  小吉猫  阅读(337)  评论(0编辑  收藏  举报