Visão geral da afinidade de sessão do Gateway de Aplicativos para contêineres
A afinidade de sessão, também conhecida como persistência de sessão ou sessões autoadesivas, é uma técnica usada no balanceamento de carga para garantir que as solicitações de um cliente sejam sempre enviadas para o mesmo servidor. Isso é importante para aplicativos que armazenam dados do usuário em variáveis de sessão ou em um cache local em um servidor específico (geralmente conhecido como um aplicativo com estado).
Com a afinidade de sessão, o Gateway de Aplicativos para contêineres apresenta um cookie no cabeçalho Set-Cookie da primeira resposta. Se o cliente apresentar o cookie em solicitações futuras, o Gateway de Aplicativos para contêineres reconhecerá o cookie e encaminha o tráfego para o mesmo destino de back-end. Confira o exemplo de cenário a seguir:
As seguintes etapas são descritas no diagrama anterior:
- Um cliente inicia uma solicitação para um front-end do Gateway de Aplicativos para contêineres.
- O Gateway de Aplicativos para contêineres seleciona um dos muitos pods disponíveis para o qual a carga da solicitação será balanceada. Neste exemplo, presumimos que o Pod C seja selecionado entre os quatro pods disponíveis.
- O Pod C retorna uma resposta ao Gateway de Aplicativos para contêineres.
- Além da resposta de back-end do Pod C, o Gateway de Aplicativos para contêineres adiciona um cabeçalho Set-Cookie que contém um hash gerado exclusivamente usado para o roteamento.
- O cliente envia outra solicitação ao Gateway de Aplicativos para contêineres junto com o cookie de afinidade de sessão definido na etapa anterior.
- O Gateway de Aplicativos para contêineres detecta o cookie e seleciona o Pod C para atender à solicitação.
- O Pod C responde ao Gateway de Aplicativos para contêineres.
- O Gateway de Aplicativos para contêineres retorna a resposta ao cliente
Detalhes de uso
A afinidade de sessão é definida pelas seguintes propriedades e características:
Nome | Descrição |
---|---|
affinityType | Os valores válidos são application-cookie ou managed-cookie. |
cookieName | Obrigatório se affinityType for application-cookie. Esse é o nome do cookie. |
cookieDuration | Obrigatório se affinityType for application-cookie. Essa é a duração (tempo de vida) do cookie em segundos. |
No tipo de afinidade de cookie gerenciado, o Gateway de Aplicativo usa valores predefinidos quando o cookie é oferecido ao cliente.
- O nome do cookie é:
AGCAffinity
. - A duração (tempo de vida) do cookie é de 86.400 segundos (um dia).
- As propriedades
cookieName
ecookieDuration
e os valores são descartados.
No tipo de afinidade de aplicativo, o nome do e a duração (tempo de vida) do cookie devem ser definidos explicitamente.
Como configurar a afinidade de sessão
A afinidade de sessão pode ser definida em um recurso RoutePolicy, que tem como destino um HTTPRoute definido. Você deve especificar sessionAffinity
com um affinityType
de um application-cookie
ou managed-cookie
. Neste exemplo, usamos application-cookie
como affinityType e definimos explicitamente um nome e tempo de vida do cookie.
Comando de exemplo para criar um novo RoutePolicy com um cookie definido chamado nomnom
com um tempo de vida de 3.600 segundos (1 hora).
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: RoutePolicy
metadata:
name: session-affinity-route-policy
spec:
targetRef:
kind: HTTPRoute
name: http-route
namespace: test-infra
group: ""
default:
sessionAffinity:
affinityType: "application-cookie"
cookieName: "nomnom"
cookieDuration: 3600
EOF