GCP: направление трафика от Global HTTP Load Balancer к внутреннему балансировщику нагрузки istio - PullRequest
2 голосов
/ 23 октября 2019

У меня есть кластеры GKE в 2 регионах в общей сети VPC, оба работают под управлением istio, и мне нужно глобально распределить нагрузку между ними. После настройки каждого кластера с помощью шлюза istio-ilbgate с открытым портом 80 создается внутренний региональный балансировщик нагрузки GCP, которому назначается внешний IP-адрес в подсети региона. Я вижу соответствующие серверные службы для обоих шлюзов ilb. Однако при настройке Global HTTP Load Balancer с новыми внутренними службами и пинге IP-адреса глобального балансировщика нагрузки он направляет запросы на IP-адрес одного из узлов кластера, а не на ip-адрес внутреннего балансировщика нагрузки, как я. ожидается.

Возможно ли то, чего я пытаюсь достичь здесь? Если да, то есть ли шаг выше?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

То, что вы пытаетесь достичь, невозможно. По двум причинам.

  1. GCP не имеет GKE Ingress, который может обрабатывать два разных кластера. Это называется входом в несколько кластеров и не поддерживается.
  2. Балансировщик нагрузки GCP не может иметь другой балансировщик нагрузки в качестве бэкэнда.
0 голосов
/ 25 октября 2019

Вы можете установить Global Loadbalancer поверх Istio. Однако вы не можете достичь балансировщика нагрузки TCP, автоматически настроенного Istio Ingress Gateway.

Этот Ingress Gateway - это служба K8S, которая предоставляет NodePorts. Вы можете получить их с помощью следующих команд:

# For HTTP
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'

# For HTTPS
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'

Теперь вы можете настроить свой глобальный сервер балансировки нагрузки с группой экземпляров, созданной вашим кластером и NodePort. Таким образом, ваш трафик будет направляться в Istio без использования шлюза Ingress (-> TCP Loadbalancer).

В двух регионах у вас должно быть 2 группы экземпляров, по 1 в каждом регионе и 2 TCPБалансировщик нагрузки, 1 в каждом регионе. Кстати, вы можете определить 2 разных бэкэнда на вашем Global Load Balancer, но вы не можете сбалансировать один и тот же трафик между двумя регионами. У вас будет 2 разных правила пути, то есть 2 разных записи URL

ОБНОВЛЕНИЕ

После отражения, если вы хотите направить один и тот же трафик в 2 регионах, выприходится полагаться на службу динамического DNS, которая выполняет этот вид балансировки нагрузки. В большинстве случаев этот вид службы DNS включает проверку работоспособности, чтобы проверить, отвечает ваш регион или нет. Сегодня Google Global Load Balancing не позволяет этого. Я знаю, что Cloudflare делают это.

...