Google Container Engine上的跨区域负载均衡+路由

Gle*_*Low 3 load-balancing google-compute-engine docker kubernetes google-kubernetes-engine

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

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

我调查过的一些选项:

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

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

Rob*_*ley 6

Google的网络负载平衡(L3)负载平衡特别针对每个区域(如果您创建类型的服务,这些是自动配置的负载平衡器LoadBalancer).正如Alex在他的回答中提到的,如果您使用网络负载平衡,则需要为每个区域配置一个负载均衡器,然后使用DNS将用户请求分散到每个负载均衡器.

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

在任何一种情况下,您都需要为要路由到唯一后端的每个URL路径创建不同的服务.这些服务不必使用不同的容器,但如果它们收到不同的流量并且您希望单独扩展它们,则可能需要这些容器.

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

而不是所有这些,我真的可以让Kubernetes集群跨越不同的地区吗?

没有开箱即用.您可以配置多区域群集(在区域内),但我们不提供配置群集的明确支持,而不是跨区域.虽然您可以自己手动执行此操作,但我们不建议这样做,因为群集管理软件中有许多参数已经过调整,假设主服务器和集群中的节点之间存在低延迟通信.