2

Как достичь балансировки нагрузки между регионами в Google Container Engine?Балансировка нагрузки по регионам + маршрутизация в Google Container Engine

У меня будет один кластер Kubernetes для каждого региона в нескольких регионах, и мне нужно маршрутизировать трафик с одного доменного имени в географически ближайший кластер.

Некоторые опции я исследованные:

  • Kubernetes LoadBalancers, кажется, ограничивается одним кластером.
  • Я не уверен, как вы получаете Kubernetes Ingress, чтобы поговорить с различными кластерами. (Похоже, этот объект поддерживается Compute Engine балансиров HTTP нагрузки, хотя.)
  • Compute Engine HTTP Load балансиры беседуют открытые кластеры sounds right, но ссылка я ссылка, кажется, есть некоторые старые термины, как gcloud beta.
  • Вместо этого, могу ли я получить кластер Kubernetes для охвата различных регионов?

Теперь, если я хочу маршрутизировать различные пути URL-адресов в разные контейнеры внутри модуля, где это сделать? Если он находится на уровне Ingress или HTTP Load Balancer, тогда у меня недостаточно детализации для обращения к конкретным контейнерам. Означает ли это, что мне придется использовать другую службу pod + для каждого пути URL?

ответ

5

Network load balancing (L3) балансировка нагрузки Google, именно за регион (эти нагрузки балансиры, которые автоматически настраиваются при создании службы типа LoadBalancer). Как сказал Алекс в своем ответе, если вы используете балансировку сетевой нагрузки, вам нужно будет настроить один балансировщик нагрузки для каждого региона, а затем использовать DNS для распространения запросов пользователей на каждый из ваших балансировщиков нагрузки.

Google HTTP(S) load balancing является кросс-регионом (например, глобальным). Это означает, что вы получаете один IP-адрес, который будет балансировать на всех ваших HTTP-серверах (S), которые могут быть распределены по нескольким кластерам в нескольких регионах. Для балансировки нагрузки между кластерами вы должны настроить балансировщик нагрузки HTTP (S) самостоятельно, как описано в Is it possible to use 1 Kubernetes ingress object to route traffic to k8s services in different clusters?.

В любом случае вам потребуется создать другую службу для каждого пути URL-адреса, который вы хотите перенаправить на уникальный бэкэнд. Сервисы не должны использовать разные контейнеры, хотя вы можете захотеть, если они получат разные объемы трафика, и вы хотите их масштабировать независимо.

Если вы используете балансировщик нагрузки HTTP (S), вы можете определить эти службы и сопоставление URL как часть конфигурации балансировки нагрузки и позволить балансировщику HTTP (S) провести проверку/маршрутизацию запроса для вас. Если вы используете сетевой балансировщик сети, вам нужно будет запустить HTTP (S) -сервер, который завершает соединение, проверяет запрос и перенаправляет его в соответствующую службу.

Вместо этого, могу ли я получить кластер Kubernetes для охвата различных регионов?

Не из коробки. Вы можете настроить многозонный кластер (внутри региона), но мы не предоставляем явной поддержки для настройки кластера, чем области областей. Хотя вы можете сделать это вручную самостоятельно, мы не рекомендуем его, так как в программное обеспечение для управления кластерами есть много параметров, которые были настроены с предположением о низкой задержке связи между ведущим и узлами в кластере.

+0

Я прочитал документы Ingress, которые вы связали, но не можете понять, как их получить во множество кластеров. В частности, 'backend:' references 'serviceName:' ​​который предположительно указывает на службу в кластере, на котором запущен контроллер Ingress? Как указать другой кластер? –

+0

В частности, http://kubernetes.io/docs/api-reference/extensions/v1beta1/definitions/#_v1beta1_ingressbackend, похоже, разрешает указывать 'serviceName:' ​​и 'servicePort:' для бэкэнд. Может, я что-то упустил? –

+0

Я думаю, что я направил вас в неправильном направлении с проникновением, поскольку он не решает вашу конкретную проблему (бэкенды в нескольких кластерах). Он отлично работает для одного кластера, но если вы хотите использовать бэкэнды в нескольких кластерах, вам нужно будет настроить балансировщик нагрузки HTTP (S) вручную. См. Http://stackoverflow.com/questions/35446512/is-it-possible-to-use-1-kubernetes-ingress-object-to-route-traffic-to-k8s-servic/35447985#35447985 для того, чтобы настройте это. –

1

В настоящее время наиболее простой вариант состоит в том, чтобы запускать взаимозаменяемые реплики в каждом кластере, настраивать балансировщик нагрузки для каждого кластера и вручную настраивать вашу запись DNS, чтобы указать на балансировщики нагрузки.

Это, правда, не очень. Лучшее решение прорабатывается для предстоящего 1.3 выпуска: https://github.com/kubernetes/kubernetes/issues/23848

+0

Не нужен ли балансировщик поперечной области, а не балансировка нагрузки на кластер? Могу ли я просто открыть кластер через NodePort? –

+0

Предпочтительным является балансировка нагрузки между регионами, но просто будет связывать несколько IP-адресов (по одному для каждого региона) с одним DNS-именем. Служба Geo DNS может использоваться для обеспечения географически разумной маршрутизации, как предлагается здесь: http://stackoverflow.com/a/21082285/1925481 –

+0

Конечно, может быть способ настроить глобальный балансировщик нагрузки, чтобы делать то, что вам нужно, Я просто не сразу это осознаю :) –

Смежные вопросы