0

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

所需设置图

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

我们在一个集群中遵循了本指南,它运行良好。但是,我们VirtualService在第二个集群中设置使用第一个集群中的出口网关时遇到了麻烦。

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

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在第二个集群中不起作用的原因。

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

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

4

1 回答 1

1

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

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

就像Tobias Henkel提到的:

如果我将入口网关定位在端口 80/443 上,然后再进一步分派到网状外部服务,我可以让它与服务条目一起正常工作。


您还可以使用Admiral自动执行流量路由。

也可以看看:

于 2021-05-31T14:52:11.173 回答