首页 文章

Google Container Engine上的跨区域负载 balancer 路由

提问于
浏览
3

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

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

我调查过的一些选项:

  • Kubernetes LoadBalancers 似乎仅限于一个群集 .

  • 我不知道你怎么得到 Kubernetes Ingress 与不同的集群交谈 . (听起来这个对象是由Compute Engine HTTP负载 balancer 器支持的 . )

  • Compute Engine HTTP Load Balancers 与暴露的集群sounds right交谈,但我引用的链接似乎有一些旧的术语,如 gcloud beta .

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

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

2 回答

  • 6

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

    谷歌的HTTP(S) load balancing是跨区域的(例如全球) . 这意味着您将获得一个可在所有HTTP(S)后端之间取得 balancer 的IP,这些后端可以分布在多个区域中的多个群集中 . 对于跨群集负载 balancer ,您必须自己配置HTTP(S)负载 balancer 器,如Is it possible to use 1 Kubernetes ingress object to route traffic to k8s services in different clusters?中所述 .

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

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

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

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

  • 1

    现在最直接的选择是在每个群集中运行可替换副本,为每个群集配置负载 balancer 器,并手动设置DNS记录以指向负载 balancer 器 .

    不过,这肯定不是很好 . 正在为即将发布的1.3版本开发更好的解决方案:https://github.com/kubernetes/kubernetes/issues/23848

相关问题