加载中...

Istio-DestnationRule应用


一.DestnationRule详解

1.配置健康检查轮询转发

最小连接数

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN

指定不同版本设置不同算法

apiVersion: networking.istio.io/v1alpha3
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

根据不用端口设置不同转发算法

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-ratings-port
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy: # Apply to all ports
    portLevelSettings:
    - port:
        number: 80
      loadBalancer:
        simple: LEAST_CONN
    - port:
        number: 9080
      loadBalancer:
        simple: ROUND_ROBIN

设置User cookie进行哈希算法

 apiVersion: networking.istio.io/v1alpha3
 kind: DestinationRule
 metadata:
   name: bookinfo-ratings
 spec:
   host: ratings.prod.svc.cluster.local
   trafficPolicy:
     loadBalancer:
       consistentHash:
         httpCookie:
           name: user
           ttl: 0s

标准负载平衡算法。

姓名 描述
ROUND_ROBIN 循环策略。默认
LEAST_CONN 最小请求负载均衡器使用 O(1) 算法,该算法选择两个随机健康主机并选择具有较少活动请求的主机。
RANDOM 随机负载均衡器选择一个随机的健康主机。如果没有配置健康检查策略,随机负载均衡器的性能通常比轮询更好。
PASSTHROUGH 此选项会将连接转发到调用者请求的原始 IP 地址,而不进行任何形式的负载平衡。必须小心使用此选项。它适用于高级用例。有关更多详细信息,请参阅 Envoy 中的原始目标负载均衡器。

2.设置连接池

规则设置了 100 个连接到名为 myredissrv 的 redis 服务的限制,连接超时为 30 毫秒

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-redis
spec:
  host: myredissrv.prod.svc.cluster.local
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
        connectTimeout: 30ms
        tcpKeepalive:
          time: 7200s
          interval: 75s

适用于 HTTP1.1/HTTP2/GRPC 连接的设置。

场地 类型 描述 必需的
http1MaxPendingRequests int32 对目标的最大挂起 HTTP 请求数。默认 2^32-1。
http2MaxRequests int32 对后端的最大请求数。默认 2^32-1。
maxRequestsPerConnection int32 每个连接到后端的最大请求数。将此参数设置为 1 将禁用保持活动。默认为 0,表示“无限制”,最大为 2^29。
maxRetries int32 在给定时间可以对集群中的所有主机进行的最大重试次数。默认为 2^32-1。
idleTimeout Duration 上游连接池连接的空闲超时。空闲超时定义为没有活动请求的时间段。如果未设置,则默认为 1 小时。当达到空闲超时时,连接将被关闭。请注意,基于请求的超时意味着 HTTP/2 PING 不会使连接保持活动状态。适用于 HTTP1.1 和 HTTP2 连接。
h2UpgradePolicy H2UpgradePolicy 指定是否应将关联目标的 http1.1 连接升级到 http2。

HTTP 和 TCP 上游连接通用的设置。

场地 类型 描述 必需的
maxConnections int32 到目标主机的最大 HTTP1 /TCP 连接数。默认 2^32-1。
connectTimeout Duration TCP 连接超时。
tcpKeepalive TcpKeepalive 如果设置,则在套接字上设置 SO_KEEPALIVE 以启用 TCP Keepalive。

TCP 保活。

场地 类型 描述 必需的
probes uint32 在确定连接已死之前,要发送且无响应的最大保活探测数。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 9。)
time Duration 在开始发送 keep-alive 探测之前,连接需要空闲的持续时间。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 7200s(即 2 小时。)
interval Duration 保持活动探测之间的持续时间。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 75s。)

3.后端服务健康检查

以下规则将连接池大小设置为 100 个 HTTP1 连接,其中与“reviews”服务的请求/连接不超过 10 个。此外,它设置了 1000 个并发 HTTP2 请求的限制,并将上游主机配置为每 5 分钟扫描一次,以便任何连续 7 次失败并出现 502、503 或 504 错误代码的主机将被弹出 15 分钟。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews-cb-policy
spec:
  host: reviews.prod.svc.cluster.local
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http2MaxRequests: 1000
        maxRequestsPerConnection: 10
    outlierDetection:
      consecutiveErrors: 7    #最大失败次数
      interval: 5m            #扫描间隔时间
      baseEjectionTime: 15m   #踢出集群的时间
场地 类型 描述 必需的
consecutiveErrors int32 主机从连接池中弹出之前的错误数。默认为 5。当通过 HTTP 访问上游主机时,502、503 或 504 返回码被视为错误。当通过不透明的 TCP 连接访问上游主机时,连接超时和连接错误/失败事件被视为错误。
interval Duration 喷射扫描分析之间的时间间隔。格式:1h/1m/1s/1ms。必须 >=1 毫秒。默认为 10 秒。
baseEjectionTime Duration 最短弹射时间。主机将保持被弹出的时间等于最小弹出持续时间与主机被弹出次数的乘积。这种技术允许系统自动增加不健康的上游服务器的弹出周期。格式:1h/1m/1s/1ms。必须 >=1 毫秒。默认为 30 秒。
maxEjectionPercent int32 上游服务的负载平衡池中可以弹出的主机的最大百分比。默认为 10%。
minHealthPercent int32 只要关联的负载平衡池在健康模式下至少具有最小健康百分比的主机,就会启用异常值检测。当负载平衡池中健康主机的百分比低于此阈值时,将禁用异常值检测,并且代理将在池中的所有主机(健康和不健康)之间进行负载平衡。可以通过将阈值设置为 0% 来禁用该阈值。默认值为 0%,因为它通常不适用于每个服务的 pod 很少的 k8s 环境。

文章作者: huhuhahei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 huhuhahei !
评论
  目录