У меня ситуация с ip_hash
на nginx для липкой сессии, где он всегда направляет трафик только на один сервер. Nginx работает за балансировщиком нагрузки Google Cloud, из nginx он попадает в балансировщик нагрузки GC Kubernetes моего приложения, прежде чем фактически перейти к одному из модулей.
У меня возникла мысль, что IP-адреса всех пользователей были замаскированы балансировщиком нагрузки GC, чтобы nginx распознал их как один источник.
Мне сказали, что мы можем добавить исходный IP-адрес пользователя в заголовок nginx, чтобы балансировщик нагрузки мог распознать их как разных пользователей. Как я могу подойти к одному? Или есть другое решение?
Если вы используете балансировку сетевой нагрузки (с целевыми пулами), балансировщик нагрузки сохраняет IP. Что происходит, так это то, что Kubernetes меняет исходный IP с IP-адресами кластера / узла.
В Kubernetes есть функция сохранения исходного IP-адреса клиента. Вы можете проверить в документации для как сохранить исходный IP-адрес клиента в службах с помощью Type = LoadBalancer (Балансировка сетевой нагрузки).
Используйте proxy_set_header, чтобы добавить исходный IP-адрес в заголовок NGINX. Ознакомьтесь со следующими примерами:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
Таким же образом вы можете добавить свой IP-адрес в заголовок NGINX.
Настроить привязка сеанса во время первоначальной настройки целевой пул установив для него один из следующих значения не по умолчанию чтобы обеспечить желаемый уровень липкая сессия:
CLIENT_IP
Двухкортежное хеширование, использующее IP-адреса источника и назначения. Все подключения от клиента будут завершаться одним и тем же экземпляром независимо от протокола, пока экземпляр остается работоспособным.
CLIENT_IP_PROTO
Трехкортежное хеширование, в котором используются IP-адреса источника и назначения, а также протокол. Все соединения от клиента будут выполняться в одном экземпляре, если они используют один и тот же протокол и экземпляр остается работоспособным.
Лакшман Диваакар относится к конфигурации привязки сеанса как к неизменяемому набору атрибутов «при создании» целевой пул. Его обзор доступных функций балансировки нагрузки Cloud Compute может быть интересен для вас: Балансировщик сетевой нагрузки по сравнению с балансировщиком нагрузки HTTP (ов).