【问题标题】:Shared istio egress gateway in multi-cluster/multi-primary mesh多集群/多主网格中的共享 istio 出口网关
【发布时间】:2021-11-05 00:47:41
【问题描述】:

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

diagram of desired setup

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

我们在一个集群中关注this guide,它运行良好。但是,我们无法在第二个集群中设置 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 在第二个集群中不起作用的原因。

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

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

【问题讨论】:

  • 嗨@Tobias Henkel,欢迎来到StackOverflow!你能告诉我你是如何部署你的集群(裸机,任何云提供商)的吗?您是否尝试使用 ServiceEntry 而不是 VirtualService?
  • 您好,感谢您的回复。我的测试设置由 AWS 中的两个 EKS 集群组成,但目标是 EKS 集群和 openstack 上的 onprem k8s 集群的组合。关于 ServiceEntry,您的意思是在集群 B 中而不是在 VirtualService 中,并且列出了以 A 的东西网关为目标的固定端点?
  • 我认为你应该在两个集群上使用Service Entry。看看这个concept 的多集群配置。在这种情况下,您还可以使用admiral 来自动进行流量路由。 Here 你可以找到另一个概念,如何创建多集群配置。这可能与您的情况非常相似。
  • 我将再为您提供一个多集群load balancing 的示例。我还发现了创建跨集群应用程序(但针对 GKE)的非常好的教程。你可以看看herehere
  • 非常感谢。事实上,我们已经使用here 创建了多集群部署。正常服务的跨集群工作负载工作正常。我的问题只是让流量通过东西网关路由到出口网关。尽管使用类似here 的方法,我已经成功地通过另一个入口网关路由流量。海军上将听起来很有趣,我会研究一下。

标签: istio istio-gateway


【解决方案1】:

根据 cmets,解决方案应如下所示:

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

就像提到的Tobias Henkel

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


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

另见:

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2020-12-27
    • 1970-01-01
    • 2021-09-11
    • 2020-11-18
    相关资源
    最近更新 更多