【问题标题】:Necessity for separate VirtualService and DestinationRule configs in Istio在 Istio 中需要单独的 VirtualService 和 DestinationRule 配置
【发布时间】:2019-01-17 06:17:46
【问题描述】:

在 Istio 中,我想知道为什么 VirtualService 和 DestinationRule 被分成两个单独的配置文件? AFAICT,DestinationRule 定义子集和 VirtualService 路由到子集。显然,他们都做的不止于此,但我的问题是,将两者分开的设计思想可能是什么。为什么我们不能在 VirtualService yaml 本身中定义子集?

接下来的问题是:为什么在destination rule中配置了断路器规则,而在VirtualService中配置了超时和重试?同样,我想,我无法理解这个设计决定背后的原因。如果这很清楚,则可以同时回答这两个问题。在概念上理解这一点的任何帮助将不胜感激。

【问题讨论】:

    标签: kubernetes istio


    【解决方案1】:

    它们旨在提供路由与路由后行为的明确分离。

    VirtualService 用于描述从一个或多个用户可寻址目标(主机)到网格内实际目标工作负载(服务)的映射(路由规则)。

    然后,DestinationRule 定义了在 VirtualService 路由发生后要应用于请求的策略集。它们旨在由服务所有者编写,描述断路器、负载平衡器设置、TLS 设置等。

    他们如何工作的概述是here

    【讨论】:

      【解决方案2】:

      我的猜测只是一种直觉,这种分离一方面反映了结构定义,另一方面反映了行为定义。

      因此,DestinationRule 不太可能改变(除非您引入新版本),而 VirtualServices 更适合进行调整和微调。

      此外,将两者解耦允许您只保留 1 个 DestinationRule 配置,但同时处理多个 VirtualServices 配置。

      我想同样的原因可以回答你的第二个问题,因为定义超时和重试更像是微调。

      也许还有我不知道的技术原因......

      【讨论】:

        【解决方案3】:

        虚拟服务就像传统代理应用程序中的虚拟主机,例如 nginx。另一方面,destination rule 就像一个集群定义,sucn 作为 nginx 中的上游服务器。断路器旨在保护上游服务器,但重试和超时是对报告客户端错误的响应。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-14
          • 2020-06-05
          • 1970-01-01
          相关资源
          最近更新 更多