Google容器引擎上的跨区域负载平衡+路由

如何在Google Container Engine上实现跨区域负载平衡?

我将在几个地区的每个地区拥有一个Kubernetes群集,我需要将stream量从单个域名路由到最接近地理位置的群集。

我调查了一些选项:

  • Kubernetes LoadBalancers似乎只限于一个集群。
  • 我不确定你如何让Kubernetes Ingress与不同的群组交谈。 (这听起来像这个对象是由Compute Engine HTTP负载平衡器支持的。)
  • 计算引擎HTTP负载平衡器与暴露集群交谈听起来 gcloud beta ,但我引用的链接似乎有一些像gcloud beta这样的旧术语。
  • 而不是所有这些,我真的可以得到一个Kubernetes集群跨越不同的地区?

现在,如果我想将不同的URLpath路由到一个窗格中的不同容器,我该怎么做? 如果它位于Ingress或HTTP负载平衡器级别,那么我没有足够的粒度来处理特定的容器。 这是否意味着我将不得不为每个不同的URLpath使用不同的pod +服务?

Google的networking负载平衡 (L3)负载平衡是专门针对每个区域的(这些负载平衡器是在创buildLoadBalancertypes的服务时自动configuration的)。 正如Alex在回答中所提到的那样,如果使用networking负载平衡,则需要为每个区域configuration一个负载平衡器,然后使用DNS将用户请求分发到每个负载平衡器。

Google的HTTP(S)负载均衡是跨区域的(例如全局)。 这意味着您可以获得一个可平衡跨所有HTTP(S)后端的IP,这个IP可以分布在多个地区的多个群集中。 对于跨群集负载平衡,您必须按照以下描述自己configurationHTTP(S)负载均衡器是否可以使用1 Kubernetes入口对象将stream量路由到不同群集中的k8s服务? 。

无论哪种情况,您都需要为每个要路由到唯一后端的URLpath创build一个不同的服务。 这些服务不必使用不同的豆荚,尽pipe您可能想要如果他们收到不同数量的stream量,并且想要独立扩展它们。

如果使用HTTP(S)负载平衡器,则可以将这些服务和URL映射定义为负载平衡器configuration的一部分,并让HTTP(S)平衡器为您执行请求检查/路由。 如果使用networking负载平衡器,则需要自行运行HTTP(S)服务器来终止连接,检查请求并将其路由到适当的服务。

而不是所有这些,我真的可以得到一个Kubernetes集群跨越不同的地区?

不是开箱的。 您可以configuration多区域群集(在一个区域内),但我们不提供configuration群集的明确支持,而不是跨区域。 虽然您可以自己手动执行此操作,但是我们不build议这样做,因为在集群pipe理软件中插入了许多参数,这些参数是在集群内的主节点和节点之间采用低延迟通信的情况下进行的。

现在最直接的select是在每个集群中运行可替代的副本,为每个集群configuration负载平衡器,并手动设置DNSlogging以指向负载平衡器。

不过,这确实不是很好。 正在为即将到来的1.3版本开发一个更好的解决scheme: https : //github.com/kubernetes/kubernetes/issues/23848