Мы работаем в трех зонах в GCE с балансировщиком нагрузки TCP Proxy впереди. Бэкэнд для балансировщика нагрузки находится на одном узле в одной из зон. Используя проверку работоспособности, балансировщик нагрузки может определить, куда направлять трафик. Это работает должным образом, когда трафик исходит за пределами Google. Для исходящего трафика мы используем шлюз NAT и маршрут с более низким приоритетом, чем маршрут Google по умолчанию (800 вместо 1000), чтобы фактически направить туда трафик для 0.0.0.0/0.
Однако, когда один из внутренних серверов, который не находится в той же зоне, что и (активный) бэкэнд для балансировщика нагрузки TCP, пытается получить доступ к внешнему адресу, он получит время ожидания соединения. Маршрут вроде не привык. Если запрос исходит из той же зоны, что и активный бэкэнд, он работает. Маршрут nat gateway похоже не используется.
Одним из решений, конечно, было бы убедиться, что во всех зонах есть активный бэкэнд, но мы предпочитаем этого не делать. Следует отметить, что когда мы получаем трафик из кластера через этот внешний IP-адрес, IP-адрес клиента в наших журналах кажется самим адресом балансировщика нагрузки. Есть идеи, как решить эту проблему иначе? Это ожидаемое поведение или мы неправильно настроили какой-то маршрут или брандмауэр?
Вы уверены, что используете балансировщик нагрузки TCP-прокси? Поскольку, если вы используете балансировщик нагрузки без прокси, ожидается, что вы увидите такое поведение.
Внутренний балансировщик нагрузки (ILB) не является фактическим устройством, кроме клиентских и внутренних экземпляров, а реализован как программирование для программно определяемой сети, используемой клиентом и сервером. Логика ILB реализуется на стороне клиента, но если серверная часть также является клиентом той же самой ILB, поскольку IP-адрес ILB настроен в гостевом агенте Google Compute Engine (GCE), запущенном на экземпляре серверной части, пакет никогда " достигает "ILB, поскольку агент GCE напрямую обрабатывает пакет внутри экземпляра серверной части.
Другими словами, ILB внутренне настраивает маршрут и IP-адрес в каждой операционной системе внутреннего экземпляра. Если серверный экземпляр выполняет запрос к ILB, этот запрос останется внутри экземпляра и не будет перенаправлен на какой-либо другой серверный экземпляр.
Документацию по внутреннему балансировщику нагрузки можно найти здесь ссылка на сайт.