Сохранение сессий#

Часто необходимо, чтобы запросы от клиента всегда передавались одному и тому же контейнеру бэкенда. Вы можете включить такое поведение с помощью функции сохранения сессий, доступной в ANIC.

ANIC поддерживает метод sticky cookie. При использовании этого метода ANIC добавляет session cookie в первый ответ от бэкенда, идентифицируя контейнер, который отправил ответ. Когда клиент делает следующий запрос, он отправляет значение cookie, и ANIC направляет запрос в тот же контейнер.

Поддерживается также расширенный метод сохранения сессий: sticky route. См. директиву sticky в конфигурации Angie.

Синтаксис#

Чтобы включить сохранение сессий для одного или нескольких сервисов, добавьте аннотацию angie.software/sticky-cookie-service в определение ресурса Ingress.

В аннотации указываются сервисы, для которых нужно включить сохранение сессий, а также различные параметры cookie.

angie.software/sticky-cookie-services: "service1[;service2;...]"

Каждый сервис следует правилу ниже:

serviceName=serviceName cookieName [expires=time] [domain=domain] [httponly] [secure] [path=path]

Синтаксис параметров такой же, как в директиве sticky в конфигурации Angie.

Пример#

В следующем примере включается сохранение сессий для двух сервисов: tea-svc и coffee-svc:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-with-session-persistence
  annotations:
    angie.software/sticky-cookie-services: "serviceName=coffee-svc srv_id expires=1h path=/coffee;serviceName=tea-svc srv_id expires=2h path=/tea"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      - path: /coffee
        pathType: Prefix
        backend:
          service:
            name: coffee-svc
            port:
              number: 80

Для обоих сервисов sticky cookie имеет одинаковое имя srv_id. Однако для каждого сервиса заданы разные значения времени жизни (expires) и пути (path).

Сохранение сессий продолжает работать даже в случае, если запущено несколько реплик ANIC.