Доступ к балансировщику нагрузки TCP TCP изнутри региона всегда направляется в одну и ту же зону

Мы работаем в трех зонах в GCE с балансировщиком нагрузки TCP Proxy впереди. Бэкэнд для балансировщика нагрузки находится на одном узле в одной из зон. Используя проверку работоспособности, балансировщик нагрузки может определить, куда направлять трафик. Это работает должным образом, когда трафик исходит за пределами Google. Для исходящего трафика мы используем шлюз NAT и маршрут с более низким приоритетом, чем маршрут Google по умолчанию (800 вместо 1000), чтобы фактически направить туда трафик для 0.0.0.0/0.

Однако, когда один из внутренних серверов это не в той же зоне, что (активный) бэкэнд для балансировщика нагрузки TCP пытается получить доступ к внешнему адресу, он получит время ожидания соединения. Маршрут вроде не привык. Если запрос исходит из той же зоны, что и активный бэкэнд, он работает. Маршрут шлюза nat, похоже, не используется.

Одним из решений, конечно же, было бы убедиться, что во всех зонах есть активный сервер, но мы предпочитаем этого не делать. Следует отметить, что когда мы получаем трафик из кластера через этот внешний IP-адрес, клиентский IP-адрес в наших журналах кажется самим адресом балансировщика нагрузки. Есть идеи, как решить эту проблему иначе? Это ожидаемое поведение или мы, возможно, неправильно настроили какой-либо маршрут или брандмауэр?

1
задан 18 March 2019 в 10:59
1 ответ

Вы уверены, что используете балансировщик нагрузки TCP-прокси. Потому что если вы используете балансировщик нагрузки не через прокси, ожидается, что вы увидите такое поведение.

Балансировщик нагрузки Internal Load Balancer (ILB) не является фактическим устройством, кроме клиентских и бэкэндных экземпляров, а реализован в виде программирования для сети, определяемой программным обеспечением (Software Defined Network), используемой клиентом и сервером. Логика ILB реализована на стороне клиента, но если бэкэнд является клиентом той же самой ILB, так как IP адрес ILB настраивается в гостевом режиме Агент Google Compute Engine (GCE), запущенный на внутреннем экземпляре, пакет никогда не "достигает" ILB, так как агент GCE напрямую обрабатывает пакет внутри внутреннего экземпляра.

Другими словами, ILB внутренне настраивает маршрут и IP адрес в операционной системе каждого внутреннего экземпляра. Если бэкенд-аппарат выполняет запрос к ILB, этот запрос останется внутри него и не будет маршрутизирован ни на какой другой бэкенд-аппарат.

Документация по внутреннему балансировщику нагрузки находится по этой ссылке.

.
1
ответ дан 3 December 2019 в 23:06

Теги

Похожие вопросы