首页 > 解决方案 > 为什么我的服务间流量显示在 Kiali 的 Passthrough 集群中

问题描述

我有两个 Istio 集群,它们使用运行 Kiali 的复制控制平面。在每个集群中,我有两个交互的应用程序,但我在 Kiali 仪表板中看不到它们之间的流量。相反,流量显示为通过直通集群。

应用程序使用 kubernetes 服务名称进行交互,并且它们交互正确,只是在 Kiali 中没有正确显示。

关于可能是什么问题的任何想法?或者这是一种预期的行为(我还是 Istio 的新手)。

标签: kubernetesistiokiali

解决方案


据我所知,这是您使用 Passthrough 选项时的预期行为。检查下面的 istiobyexample 链接,它准确地显示了它是如何工作的。


启用ALLOW_ANY后, Istio使用名为 PassthroughCluster 的 Envoy 集群,由 sidecar 代理强制执行,以监控出口流量。


看看关于那个的 kiali文档

为什么我会看到 PassthroughCluster 的流量?

进入 PassthroughCluster(或 BlackHoleCluster)的请求是未路由到定义的服务或服务条目的请求,而是最终到达这些内置 Istio 请求处理程序之一。有关详细信息,请参阅监控被阻止和直通的外部服务流量。

到这些节点的意外路由并不表示 Kiali 问题,您看到的是 Istio 正在执行的实际路由。一般来说,这是由于配置错误和/或缺少 Istio sidecar。较少但可能是网格的实际问题,例如同步问题或被驱逐的 pod。

使用 Kiali 的工作负载列表视图来确保边车不丢失。使用 Kiali 的 Istio Config 列表视图来查找任何配置验证错误。


还有一个关于istiobyexample.dev的例子

选项 1 - 直通

首先,让我们使用带有默认 ALLOW_ANY 选项的 Istio 安装。这意味着无需额外配置就允许 idgen 对 httpbin 的请求。启用 ALLOW_ANY 后,Istio 使用一个名为 PassthroughCluster 的 Envoy 集群,由 idgen 的 sidecar 代理强制执行,以监控出口流量。

Envoy 集群是一组后端(或“上游”)端点,代表一个外部服务。Istio sidecar Envoy 代理将过滤器应用于来自应用程序容器的拦截请求。基于这些过滤器,Envoy 将流量发送到特定路由。路由指定要向其发送流量的集群。

Istio Passthrough 集群设置为后端是原始请求目的地。因此,当为出口流量启用 ALLOW_ANY 时,Envoy 将简单地将 idgen 的请求“传递”到 httpbin。

有了这个配置,如果我们通过 IngressGateway 发送recipe ID 请求,idgen 就可以成功调用httpbin。此流量在 Kiali 服务图中显示为 PassthroughCluster 流量 - 我们需要添加一个 ServiceEntry 以便 httpbin 获得自己的服务级别遥测。(我们稍后会这样做。)

在此处输入图像描述

但是,如果我们在 Prometheus 中深入研究并找到 istio_total_requests 指标,我们可以看到 PassthroughCluster 流量将流向名为 httpbin.org 的目标服务。

在此处输入图像描述


希望您觉得这个有帮助。


推荐阅读