istio 请求超时相关详解

发布时间 2023-04-24 12:15:07作者: 李瑞鑫

虚拟服务中这段代码含义

虚拟服务中这段代码含义“
spec:
  gateways:
    - magicboard
    - mesh
  hosts:
    - magicboard
    - magicboard.lh.prod
  http:
    - name: default
      retries:
        attempts: 3
        retryOn: 'reset,connect-failure,retriable-status-codes,503'
      route:
        - destination:
            host: magicboard
            subset: v04210419
      timeout: 10s”

这段代码是 Istio 中虚拟服务的流量路由配置,它指定了路由到 magicboard 服务的 v04210419 版本时的一些属性:

  • spec.gateways 指定了该虚拟服务绑定的网关,这里绑定了 magicboardmesh 两个网关。
  • spec.hosts 指定了该虚拟服务所匹配的主机名,这里包括了 magicboardmagicboard.lh.prod 两个主机名。
  • http.name 定义了虚拟服务的名称。在这个例子中,名称为 default
  • http.retries.attempts 定义了当请求失败时,Istio 应该重试多少次。在这个例子中,设置为 3 次。
  • http.retries.retryOn 定义了在哪些故障情况下,Istio 应该重试请求。在这个例子中,设置为 resetconnect-failureretriable-status-codes503。这意味着当出现连接重置、连接失败、可重试的 HTTP 状态码或 503 错误时,Istio 将重试请求。
  • http.route.destination.host 定义了路由的目标服务。在这个例子中,目标服务为 magicboard
  • http.route.destination.subset 定义了路由的目标服务的子集版本,即 v04210419
  • http.timeout 定义了路由到目标服务的请求超时时间,这里设置为 10 秒。

这些配置可用于确保流量路由到正确的服务版本,并在出现故障时实现故障恢复。通过指定不同的网关和主机名,Istio 可以将流量路由到不同的虚拟服务中,从而实现对流量的细粒度控制。

 

 

目标规则中这段代码的含义“
spec:
  host: magicboard
  subsets:
    - labels:
        version: v04210419
      name: v04210419
  trafficPolicy:
    connectionPool:
      http:
        idleTimeout: 1800s
        maxRetries: 3
      tcp:
        connectTimeout: 1s
        maxConnections: 500
        tcpKeepalive:
          interval: 3s
          probes: 2
          time: 5s”

这段代码是 Istio 中目标规则的配置,它指定了服务的子集和流量策略的一些属性:

  • spec.host 定义了服务的主机名。在这个例子中,服务的主机名为 magicboard
  • spec.subsets 定义了服务的子集。在这个例子中,定义了一个名为 v04210419 的子集,并使用 version 标签来匹配这个子集。这意味着服务的标签中需要包含 version=v04210419,才会路由到这个子集中的服务实例。
  • trafficPolicy.connectionPool 定义了服务的连接池策略。http.idleTimeout 定义了 HTTP 连接的空闲超时时间,设置为 1800 秒。http.maxRetries 定义了在请求失败时 Istio 应该重试多少次。在这个例子中,设置为 3 次。tcp.connectTimeout 定义了 TCP 连接的超时时间,设置为 1 秒。tcp.maxConnections 定义了连接池中保留的最大连接数,设置为 500。tcpKeepalive.interval 定义了 TCP keepalive 消息的发送间隔,设置为 3 秒。tcpKeepalive.probes 定义了 TCP keepalive 消息的发送次数,设置为 2 次。tcpKeepalive.time 定义了 TCP keepalive 消息的超时时间,设置为 5 秒。

这些配置可用于优化服务的连接池,以及定义流量的一些策略,如重试次数、连接超时时间等。通过使用子集,Istio 可以将服务实例分为多个版本或分组,并对它们应用不同的流量策略。

 

istio中虚拟服务和目标规则里配置的超时有什么区别?

虚拟服务和目标规则中的超时配置的主要区别是它们的作用范围不同。

在 Istio 中,虚拟服务定义了从应用程序到 Istio 代理的流量规则,而目标规则定义了从 Istio 代理到服务实例的流量规则。因此,在虚拟服务中配置的超时适用于应用程序到 Istio 代理的流量,而在目标规则中配置的超时适用于 Istio 代理到服务实例的流量。

具体来说,虚拟服务中的超时配置定义了在将请求从应用程序路由到服务实例之前,Istio 代理需要等待的最长时间。如果超过这个时间,Istio 将终止请求并返回错误响应。

而目标规则中的超时配置定义了在将请求从 Istio 代理发送到服务实例之前,Istio 代理需要等待的最长时间。如果超过这个时间,Istio 代理将关闭与服务实例的连接并返回错误响应。

因此,虚拟服务和目标规则中的超时配置通常应该根据不同的需求进行设置,以便在服务层面和应用程序层面都能够合理地处理超时情况。

 

 

虚拟服务中这段代码含义" 
 - fault:
      delay:
        percent: 100
        fixedDelay: 2s"

这段代码是 Istio 中虚拟服务的故障注入配置,它指定了一种故障类型,即延迟注入故障:

  • fault.delay.percent 定义了要注入故障的百分比。在这个例子中,100% 的请求将受到延迟注入故障。
  • fault.delay.fixedDelay 定义了延迟的时间长度。在这个例子中,延迟时间为 2 秒。

这意味着,在使用这个虚拟服务的过程中,所有请求都将受到 2 秒的延迟。延迟注入故障是一种常见的故障注入策略,它可以模拟网络延迟或服务处理请求的延迟,以测试系统的鲁棒性和容错性。在 Istio 中,可以使用虚拟服务来配置各种类型的故障注入策略,以帮助测试和评估应用程序的稳定性。