1

我正在尝试了解 Istio 流量路由。我在演示模式下安装了 Istio 并开始使用示例。示例让您安装了一些网关(我安装bookinfo-gatewayhttpbin-gateway.

但似乎我所有的流量都通过命名空间中定义的“http2”istio-ingressgateway端口istio-system

该文档引用了这一点:

Istio 提供了一些您可以使用的预配置网关代理部署(istio-ingressgateway 和 istio-egressgateway) - 如果您使用我们的演示安装,两者都已部署

但是当我运行时:kubectl -n istio-system get service istio-ingressgateway -o yaml结果显示kind: Service.

演示让我展示的其他网关kind: Gateway

所以我很困惑......

  1. 服务和网关之间有区别吗?
  2. 我将如何使用示例应用程序网关而不是istio-ingressgateway(这实际上是一项服务)。
  3. istio 如何将 my 连接VirtualServiceistio-ingressgateway. 它只是在寻找所有VirtualServices吗?
4

1 回答 1

4

服务和网关之间有区别吗?

是的。

  • istio-ingressgateway是一个 kubernetes 类型的服务LoadBalancer(或NodePort,取决于您的设置),用作集群的入口点。ingressgateway 是 istio 的入口控制器,它是完全可选的。
  • 是 istio的gateway自定义资源,用作进入网格的入口。它被选择器绑定到入口网关,例如参见https://github.com/istio/istio/blob/master/samples/httpbin/httpbin-gateway.yaml
kind: Gateway
[...]
spec:
  selector:
    istio: ingressgateway

我将如何使用示例应用程序网关而不是 istio-ingressgateway(这实际上是一项服务)。

您需要两者(或其他形式的入口控制器并通过网状网关路由所有流量,更多内容见下文)。

istio 如何将我的 VirtualService 连接到 istio-ingressgateway。它只是在寻找所有的 VirtualServices 吗?

再次查看这个 yaml 文件:https ://github.com/istio/istio/blob/master/samples/httpbin/httpbin-gateway.yaml

网关绑定到入口网关。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway
[...]

一个VirtualService类似文件中的那个被绑定到一个gateway.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  gateways:
  - httpbin-gateway
[...]

因此,如果流量使用您的网关,VirtualService则考虑。

除了您配置的网关之外,始终存在网状网关。因此,如果您希望您的内部集群流量使用 istio 配置,您需要将网状网关添加到您的虚拟服务:

  gateways:
  - httpbin-gateway
  - mesh

或为此创建一个单独的虚拟服务。如果您未设置任何网关,则将使用网状网关,因为它是默认设置。请参阅:https ://istio.io/latest/docs/reference/config/networking/virtual-service/#VirtualService -> 网关条目

于 2021-03-10T12:21:49.480 回答