我们正在尝试在多集群/多主网格中设置出口网关 出口网关仅位于一个集群中但在两个集群中都使用的配置。
用例是集群位于不同的网络区域,我们希望能够 将流量路由到一个区域,对另一个区域中的客户端透明。
我们在一个集群中跟踪 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
在第二个集群中不起作用的原因。
作为一种解决方法,我们可以将出口流量重定向到第一个集群的入口网关,但这 存在流量离开和重新进入网格的缺点,这可能会影响跟踪和监控。
目前是否可以设置一个可供网格中所有集群使用的单个出口网关,或者我们是否必须采用解决方法?
答案 0 :(得分:1)
根据评论,解决方案应该如下工作:
要创建多集群部署,您可以使用 here。在这种情况下,正常服务的跨集群工作负载工作正常。但是,将流量通过东西向网关路由到出口网关时存在问题。这可以用 this tutorial 解决。
您还应该在两个集群中将 kind: VirtualService
更改为 kind: ServiceEntry
。
就像提到的this example:
<块引用>如果我将入口网关定位在端口 80/443 上,然后进一步分派到网格外部服务,我就可以很好地处理服务条目。
您还可以使用 Tobias Henkel 自动进行流量路由。
另见: