据我了解,Istio 目标规则可以定义负载平衡策略以达到服务的子集,例如基于不同版本的服务的子集。所以目标规则是负载平衡的第一级。
请求最终会到达一个 K8s 服务,该服务一般由 kube-proxy 实现。Kube-proxy 在其后端使用 Pod 进行简单的负载平衡。这是第二级负载平衡。
有没有办法删除第二个负载均衡器?例如,我们是否可以创建许多提供相同服务的服务实例,并且可以通过目标规则进行负载平衡,然后每个服务实例只有一个 pod,这样 kube-proxy 就不会应用负载平衡?
据我了解,Istio 目标规则可以定义负载平衡策略以达到服务的子集,例如基于不同版本的服务的子集。所以目标规则是负载平衡的第一级。
请求最终会到达一个 K8s 服务,该服务一般由 kube-proxy 实现。Kube-proxy 在其后端使用 Pod 进行简单的负载平衡。这是第二级负载平衡。
有没有办法删除第二个负载均衡器?例如,我们是否可以创建许多提供相同服务的服务实例,并且可以通过目标规则进行负载平衡,然后每个服务实例只有一个 pod,这样 kube-proxy 就不会应用负载平衡?
根据istio文档:
Istio 的流量路由规则可让您轻松控制服务之间的流量和 API 调用。Istio 简化了断路器、超时和重试等服务级别属性的配置,并可以轻松设置重要任务,例如 A/B 测试、金丝雀发布和基于百分比的流量拆分的分阶段发布。它还提供了开箱即用的故障恢复功能,可帮助您的应用程序更健壮地抵御依赖服务或网络的故障。
Istio 的流量管理模型依赖于与您的服务一起部署的 Envoy 代理。您的网格服务发送和接收的所有流量(数据平面流量)都通过 Envoy 代理,从而可以轻松地引导和控制网格周围的流量,而无需对您的服务进行任何更改。
如果您对本指南中描述的功能如何工作的详细信息感兴趣,您可以在 架构概述中找到有关 Istio 流量管理实现的更多信息。本指南的其余部分介绍了 Istio 的流量管理功能。
这意味着 istio 服务网格通过 envoy 代理进行通信,而 envoy 代理又依赖于 kubernetes 网络。
我们可以举一个例子,其中VirtualService
使用 istio 入口网关的 a 将其流量负载平衡到基于标签的两个不同服务。然后这些服务可以有多个 pod。
在这种情况下,Istio 负载平衡仅适用于(第 7 层),这会导致路由到特定端点(服务之一)并依赖 kubernetes 来处理连接,其余部分包括服务循环负载平衡(第 4 层)多个 pod 的情况。
具有多个 pod 的单个服务的优势显然是更容易配置和管理。如果每个服务有 1 个 pod,则每个服务都需要单独重新配置,并失去其所有扩展功能的能力。
Youtube 上有一个很棒的视频,它部分涵盖了这个主题: Matt Turner 的 Istio 的数据包生命。
我强烈建议您观看,因为它解释了 istio 在基本层面上的工作原理。