多集群/多主网格中的共享 istio 出口网关

时间:2021-05-21 13:38:55

标签: istio istio-gateway

我们正在尝试在多集群/多主网格中设置出口网关 出口网关仅位于一个集群中但在两个集群中都使用的配置。

diagram of desired setup

用例是集群位于不同的网络区域,我们希望能够 将流量路由到一个区域,对另一个区域中的客户端透明。

我们在一个集群中跟踪 this guide 并且运行良好。但是我们在第二个集群中设置 VirtualService 时遇到问题 在第一个集群中使用出口网关。

将以下虚拟服务部署到第二个集群时,cluster_not_found 得到 503。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: direct-cnn-through-egress-gateway
spec:
  hosts:
  - edition.cnn.com
  gateways:
  - istio-egressgateway
  - mesh
  http:
  - match:
    - gateways:
      - mesh
      port: 80
    route:
    - destination:
        host: istio-egressgateway.istio-system.svc.cluster.local
        port:
          number: 80
      weight: 100
  - match:
    - gateways:
      - istio-egressgateway
      port: 80
    route:
    - destination:
        host: edition.cnn.com
        port:
          number: 80
      weight: 100

第二个集群中 Pod 上的端点代理配置丢失了 istio-egressgateway.istio-gateways.svc.cluster.local 端点(发现所有其他服务并将其定向到其他集群的东西向网关)。 我们认为这就是此 VirtualService 在第二个集群中不起作用的原因。

作为一种解决方法,我们可以将出口流量重定向到第一个集群的入口网关,但这 存在流量离开和重新进入网格的缺点,这可能会影响跟踪和监控。

目前是否可以设置一个可供网格中所有集群使用的单个出口网关,或者我们是否必须采用解决方法?

1 个答案:

答案 0 :(得分:1)

根据评论,解决方案应该如下工作:

要创建多集群部署,您可以使用 here。在这种情况下,正常服务的跨集群工作负载工作正常。但是,将流量通过东西向网关路由到出口网关时存在问题。这可以用 this tutorial 解决。 您还应该在两个集群中将 kind: VirtualService 更改为 kind: ServiceEntry

就像提到的this example

<块引用>

如果我将入口网关定位在端口 80/443 上,然后进一步分派到网格外部服务,我就可以很好地处理服务条目。


您还可以使用 Tobias Henkel 自动进行流量路由。

另见: