Google容器引擎上的跨区域负载均衡+路由
Cross-region load balancing + routing on Google Container Engine
Google容器引擎如何实现跨地域负载均衡?
我将在多个区域每个区域有一个 Kubernetes 集群,我需要将流量从单个域名路由到地理位置最近的集群。
我调查过的一些选项:
- Kubernetes LoadBalancers 似乎仅限于一个集群。
- 我不确定您如何让 Kubernetes Ingress 与不同的集群通信。 (不过听起来这个对象是由 Compute Engine HTTP 负载平衡器支持的。)
- Compute Engine HTTP 负载平衡器 与暴露的集群通信 sounds right,但我引用的 link 似乎有一些旧术语,例如
gcloud beta
.
- 除此之外,我真的可以让 Kubernetes 集群跨越不同的区域吗?
现在,如果我想将不同的 URL 路径路由到 pod 中的不同容器,我该在哪里做?如果它在 Ingress 或 HTTP 负载均衡器级别,那么我没有足够的粒度来处理特定容器。这是否意味着我必须为每个不同的 URL 路径使用不同的 pod + 服务?
目前最直接的选择是 运行 每个集群中的可替代副本,为每个集群配置一个负载均衡器,并手动设置您的 DNS 记录以指向负载均衡器。
不过,这确实不是很好。正在为即将发布的 1.3 版本制定更好的解决方案:https://github.com/kubernetes/kubernetes/issues/23848
Google 的 Network load balancing (L3) 负载均衡专门针对每个区域(这些是在您创建 LoadBalancer
类型的服务时自动配置的负载均衡器) .正如 Alex 在他的回答中提到的,如果您使用网络负载均衡,您将需要为每个区域配置一个负载均衡器,然后使用 DNS 将用户请求传播到您的每个负载均衡器。
Google 的 HTTP(S) load balancing is cross-region (e.g. global). This means that you get a single IP that will balance across all of your HTTP(S) backends, which can be spread across multiple clusters in multiple regions. For cross cluster load balancing, you must configure the HTTP(S) load balancer yourself as described in 。
无论哪种情况,您都需要为要路由到唯一后端的每个 URL 路径创建不同的服务。这些服务不必使用不同的 pods,但如果它们接收到不同的流量并且您希望独立扩展它们,您可能希望使用不同的服务。
如果您使用 HTTP(S) 负载平衡器,您可以将这些服务和 URL 映射定义为负载平衡器配置的一部分,并让 HTTP(S) 平衡器进行请求检查/路由为你。如果您使用网络负载平衡器,那么您需要自己 运行 一个 HTTP(S) 服务器来终止连接、检查请求并将其路由到适当的服务。
Instead of all this, can I actually get a Kubernetes cluster to span different regions?
不是开箱即用的。您可以配置多专区集群(在一个区域内),但我们不明确支持配置跨区域集群。虽然您可以自己手动执行此操作,但我们不建议这样做,因为集群管理软件中内置了许多参数,这些参数已根据集群内主节点和节点之间的低延迟通信假设进行了调整。
Google容器引擎如何实现跨地域负载均衡?
我将在多个区域每个区域有一个 Kubernetes 集群,我需要将流量从单个域名路由到地理位置最近的集群。
我调查过的一些选项:
- Kubernetes LoadBalancers 似乎仅限于一个集群。
- 我不确定您如何让 Kubernetes Ingress 与不同的集群通信。 (不过听起来这个对象是由 Compute Engine HTTP 负载平衡器支持的。)
- Compute Engine HTTP 负载平衡器 与暴露的集群通信 sounds right,但我引用的 link 似乎有一些旧术语,例如
gcloud beta
. - 除此之外,我真的可以让 Kubernetes 集群跨越不同的区域吗?
现在,如果我想将不同的 URL 路径路由到 pod 中的不同容器,我该在哪里做?如果它在 Ingress 或 HTTP 负载均衡器级别,那么我没有足够的粒度来处理特定容器。这是否意味着我必须为每个不同的 URL 路径使用不同的 pod + 服务?
目前最直接的选择是 运行 每个集群中的可替代副本,为每个集群配置一个负载均衡器,并手动设置您的 DNS 记录以指向负载均衡器。
不过,这确实不是很好。正在为即将发布的 1.3 版本制定更好的解决方案:https://github.com/kubernetes/kubernetes/issues/23848
Google 的 Network load balancing (L3) 负载均衡专门针对每个区域(这些是在您创建 LoadBalancer
类型的服务时自动配置的负载均衡器) .正如 Alex 在他的回答中提到的,如果您使用网络负载均衡,您将需要为每个区域配置一个负载均衡器,然后使用 DNS 将用户请求传播到您的每个负载均衡器。
Google 的 HTTP(S) load balancing is cross-region (e.g. global). This means that you get a single IP that will balance across all of your HTTP(S) backends, which can be spread across multiple clusters in multiple regions. For cross cluster load balancing, you must configure the HTTP(S) load balancer yourself as described in
无论哪种情况,您都需要为要路由到唯一后端的每个 URL 路径创建不同的服务。这些服务不必使用不同的 pods,但如果它们接收到不同的流量并且您希望独立扩展它们,您可能希望使用不同的服务。
如果您使用 HTTP(S) 负载平衡器,您可以将这些服务和 URL 映射定义为负载平衡器配置的一部分,并让 HTTP(S) 平衡器进行请求检查/路由为你。如果您使用网络负载平衡器,那么您需要自己 运行 一个 HTTP(S) 服务器来终止连接、检查请求并将其路由到适当的服务。
Instead of all this, can I actually get a Kubernetes cluster to span different regions?
不是开箱即用的。您可以配置多专区集群(在一个区域内),但我们不明确支持配置跨区域集群。虽然您可以自己手动执行此操作,但我们不建议这样做,因为集群管理软件中内置了许多参数,这些参数已根据集群内主节点和节点之间的低延迟通信假设进行了调整。