У меня есть приложение .net websocket внутри кластера K8s.Мне нужно реализовать липкую сессию для веб-сокета, используя nginx с открытым исходным кодом.
Я прочитал документацию по nginx и kubernetes.https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#session-affinity
В нем говорится, что мы можем использовать приведенную ниже конфигурацию для липкой сессии:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "ingresscoookie"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800
, но, похоже, это не работает.Я попробовал пример кода, предоставленного kubernetes здесь https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/affinity/cookie/ingress.yaml.
Это работает для меня, поэтому я считаю, что сходство сеансов на основе файлов cookie, похоже, не работает для веб-сокетов.
При дальнейшем копании документациион говорит, что я могу использовать алгоритм хэширования IP.поэтому я попытался использовать приведенную ниже аннотацию.
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
это также не удалось.Запросы по-прежнему сбалансированы с использованием алгоритма по умолчанию.
Как добиться устойчивости сеанса?