Я много лет работал с другими балансировщиками нагрузки, поэтому ожидал, что балансировщики нагрузки GCP будут работать так же, как и другие, при использовании параметров сохранения сеанса.
К сожалению, включение сохранения сеанса для бэкэндов в GCP LB, похоже, не отправляет все запросы для определенного клиента на один бэкэнд-сервер (ни с использованием файлов cookie, ни с параметрами сохранения сеанса IP)
Это известная ошибка / поведение или что-то, что я могу решить самостоятельно?
Я сделал этот быстрый тест:
Если я сделаю то же самое, скажем, в Rackspace, я всегда получу тот же IP-адрес, что и результат, но в GCP я вижу, что могу случайным образом связаться с любым из двух своих внутренних серверов.
Это мой тестовый сценарий PHP:
<?php
$realIP = file_get_contents("http://ipecho.net/plain");
echo "My Ip is " . $realIP;
echo "\n";
?>
И это мой тестовый прогон:
➜ ~ while true; do curl -b cookie.txt -c cookie.txt $IP/get_ip.php; sleep 1 ; done
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.138.72
Сохранение сеанса хорошо работает, когда оно используется с однозонными группами экземпляров. Мне пришлось пожертвовать использованием многозонных групп экземпляров, пока эта проблема не была решена.
Если вы используете файлы cookie для сохранения, вам необходимо предоставить банку cookie для использования curl. В противном случае каждый запрос выглядит так, как будто он исходит от нового пользователя. Попробуйте такую команду:
while true; do -b cookie.txt -c cookie.txt curl $IP/get_ip.php; sleep 1 ; done
К сожалению, похоже, что персистентность сеанса «пока» недоступна для балансировщиков нагрузки GCP. Чтобы сохранить токен SAML между моим IDP и SP, мне пришлось заранее установить сервер NGINX PLUS.
Это можно развернуть с помощью Cloud Launcher: NGINX PLUS