Istio 入口和出口网关的用途

pwf*_*amy 3 openshift kubernetes istio

我无法理解入口和出口 istio 网关控制哪些流量。

  1. 例如,应用程序在 MQ 队列上设置侦听器。这是入口或出口流量的示例吗?我认为当应用程序发起连接时,该流量将被定向到出口网关。相反,如果应用程序是端点,则流量必须通过入口网关路由。
  2. 假设应用程序 A 是应用程序 B 的外部服务。应用程序 A 向 B 发出休息请求。该请求是否应该通过入口路由?现在应用程序 B 向 A 发出休息请求。流量现在应该通过出口吗?

jt9*_*t97 7

让我们从一些理论开始。我发现很少有资料描述 istio 入口网关和出口网关的工作原理。

\n

Istio 文档

\n
\n

Istio 使用入口和出口网关来配置在服务网格边缘执行的负载均衡器。入口网关允许您定义所有传入流量流经的网格的入口点。出口网关是一个对称的概念;它定义了网格的退出点。出口网关允许您将 Istio 功能(例如监控和路由规则)应用于退出网格的流量。

\n
\n
\n

Istio 行动手册

\n
\n

为了让我们的应用程序和服务提供任何有意义的内容,它们\xe2\x80\x99将需要\n与我们集群外部的应用程序进行交互。这可能是现有的整体应用程序、现成的软件、消息队列、数据库和第 3 方合作伙伴系统。\n为此,操作员需要配置 Istio 以允许流量进入集群,并非常具体地\n说明什么内容允许流量离开集群。\n提供此功能的 Istio 组件是istio-ingressgateway和\n istio-egressgateway

\n
\n

这是一张很好地展示了这一点的图片

\n

在此输入图像描述

\n
\n

万岁云

\n
\n

入口网关充当网格内运行的所有服务的入口点。

\n
\n

在此输入图像描述

\n
\n

出口网关是网格的出口点,允许我们应用 Istio 功能。这包括对退出网格的流量应用监控和路由规则等功能。

\n
\n

在此输入图像描述

\n
\n

关于您的问题

\n
\n

例如,应用程序在 MQ 队列上设置侦听器。这是入口或出口流量的示例吗?我认为当应用程序发起连接时,该流量将被定向到出口网关。相反,如果应用程序是端点,则流量必须通过入口网关路由。

\n
\n

在此输入图像描述

\n

我不熟悉消息队列,但根据上图,我们假设消费者位于网格内部,因此生产者服务必须通过入口网关到达那里。

\n

[生产者服务] -> 入口网关 -> [envoy sidecar -> 消费者服务]

\n

所以是的,流量必须通过入口网关路由

\n
\n
\n

假设应用程序 A 是应用程序 B 的外部服务。应用程序 A 向 B 发出休息请求。该请求是否应该通过入口路由?现在应用程序 B 向 A 发出休息请求。流量现在应该通过出口吗?

\n
\n

如果服务网格内的服务想要与外部服务通信,我们应该从为其配置出口服务入口开始。

\n
\n

由于默认情况下,来自支持 Istio 的 pod 的所有出站流量都会重定向到其 sidecar 代理,因此集群外部 URL 的可访问性取决于代理的配置。默认情况下,Istio 将 Envoy 代理配置为传递未知服务的请求。尽管这提供了一种开始使用 Istio 的便捷方法,但配置更严格的控制通常更可取。

\n
\n

据我所知,流量就是这样的。

\n
appA -> external service outside the mesh\nappB -> injected service in the istio mesh\n
Run Code Online (Sandbox Code Playgroud)\n

假设您想使用从 appA 到 appB 的curl

\n

[app A](curl ingress-external-ip/特定路径或端口) -> 入口网关 -> [envoy sidecar -> appB]

\n

假设您想使用从 appB 到 appA 的curl

\n

[appB -> envoy sidecar](curl appA) -> 出口网关 -> [appA]

\n
\n

如果您还有其他问题或想讨论某些问题,请在评论中告诉我。

\n