Сохранение сессий#
Часто необходимо, чтобы запросы от клиента всегда передавались одному и тому же контейнеру бэкенда. Вы можете включить такое поведение с помощью функции сохранения сессий, доступной в ANIC.
ANIC поддерживает метод sticky cookie
.
При использовании этого метода ANIC добавляет session cookie в первый ответ от бэкенда,
идентифицируя контейнер, который отправил ответ.
Когда клиент делает следующий запрос, он отправляет значение cookie
,
и ANIC направляет запрос в тот же контейнер.
Поддерживается также расширенный метод сохранения сессий: Чтобы включить сохранение сессий для одного или нескольких сервисов,
добавьте аннотацию В аннотации указываются сервисы, для которых нужно включить сохранение сессий,
а также различные параметры Каждый сервис следует правилу ниже: Синтаксис параметров такой же, как в директиве sticky в конфигурации Angie. В следующем примере включается сохранение сессий для двух сервисов:
Для обоих сервисов sticky 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]
Пример#
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
srv_id
.
Однако для каждого сервиса заданы разные значения времени жизни (expires
) и пути (path
).