У меня есть ситуация с ip_hash
nginx для sticky session, где он всегда направляет трафик только на один сервер. Nginx работает за балансировщиком нагрузки Google Cloud, из nginx он попадает на балансировщик нагрузки Kubernetes GC моего приложения, прежде чем фактически перейти к одному из pod.
У меня есть мысль, что IP-адреса всех пользователей были замаскированы балансировщиком нагрузки GC, чтобы nginx распознавал их как один источник.
Мне сказали, что мы можем добавить оригинальный IP пользователя в заголовок nginx, чтобы балансировщик нагрузки мог распознавать их как разных пользователей. Как мне к этому подойти? Или есть другое решение?
решение1
Если вы используете балансировку сетевой нагрузки (с целевыми пулами), балансировщик нагрузки сохраняет IP. Происходит то, что Kubernetes меняетисходный IP-адресс IP-адресами кластера/узла.
В Kubernetes есть функция сохранения исходного IP клиента. Вы можете проверить в документациикак сохранить исходный IP клиента в службах с Type=LoadBalancer(Балансировка сетевой нагрузки).
решение2
Настроитьсродство сеансаво время первоначальной конфигурациицелевой пулустановив его на одно из следующих значенийзначения, отличные от значений по умолчаниюдля того, чтобы обеспечить желаемый уровеньлипкая сессия:
CLIENT_IP
Хэширование 2-кортежей, которое использует исходный и целевой IP-адреса. Все соединения от клиента будут попадать на один и тот же экземпляр независимо от протокола, пока экземпляр остается работоспособным.
CLIENT_IP_PROTO
3-кортежное хеширование, которое использует исходный и целевой IP-адреса и протокол. Все соединения от клиента будут заканчиваться на одном и том же экземпляре, пока они используют один и тот же протокол, а экземпляр остается работоспособным.
Лакшман Дивакаротносится к конфигурации привязки сеанса как к неизменяемому набору атрибутов"во время создания"целевой пул. Его обзор доступных функций балансировки нагрузки Cloud Compute может быть вам интересен:Балансировщик сетевой нагрузки против балансировщика нагрузки HTTP(s).
решение3
Используйте 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.