Фон
У меня есть веб-приложение, которое развернуто для развертывания с несколькими модулями.Развертывание выставлено в интернет с сервисом kubernetes с внешним IP.
Внешний IP-адрес, доступный миру через Cloudflare:
Client ---> Cloudflare ---> k8 service ---> pod
Это веб-приложение должно быть определено с помощью липких сеансов.Поэтому я исправил свой сервис с помощью sessionAffinity: ClientIP
, например:
kubectl patch service MYSERVICE -p '{"spec":{"sessionAffinity":"ClientIP"}}'
Я проверил его в среде разработки и обнаружил, что сходство сессий не работает должным образом.
Расследование
Я искал проблему с липкими сессиями.Затем я обнаружил, что IP-адрес вызывающего абонента Cloudflare может меняться время от времени - случайным образом.Это перенаправит всех пользователей на другой модуль - именно то, что должен решить Sticky Session.
Итак, проблема в том, что моя служба Loadbalancer перенаправляет трафик в соответствии с Cloudflare IP и случайным образом.
Возможные решения
- Я обнаружил, что возможно загружать трафик в соответствии с Cookie.Основал этот источник .Но это с использованием расширенных компонентов Kubernetes, таких как BackendService и Ingress, которые должны быть четко определены.Есть ли у вас более простое решение?
- Cloudflare, прикрепляющий реальный клиентский IP к запросу в заголовках.Можно ли определить балансировку нагрузки для просмотра этого заголовка и перенаправить трафик в соответствии с его значением?