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

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

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

Синтаксис#

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

Пример#

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

apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
  name: cafe
spec:
  host: cafe.example.com
  tls:
    secret: cafe-secret
  upstreams:
  - name: tea
    service: tea-svc
    port: 80
    sessionCookie:
      enable: true
      name: srv_id
      path: /tea
      expires: 2h
  - name: coffee
    service: coffee-svc
    port: 80
    sessionCookie:
      enable: true
      name: srv_id
      path: /coffee
      expires: 1h
  routes:
  - path: /tea
    action:
      pass: tea
  - path: /coffee
    action:
      pass: coffee

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

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