Visão geral da afinidade de sessão do Application Gateway for Containers
A afinidade de sessão, também conhecida como persistência de sessão ou sessões adesivas, é 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 chamado de aplicativo com monitoração de estado).
Com afinidade de sessão, o Application Gateway for Containers apresenta um cookie no cabeçalho Set-Cookie da primeira resposta. Se o cliente apresentar o cookie em solicitações futuras, o Application Gateway for Containers reconhecerá o cookie e encaminhará o tráfego para o mesmo destino de back-end. Veja o seguinte cenário de exemplo:
As seguintes etapas são descritas no diagrama anterior:
- Um cliente inicia uma solicitação para um front-end do Application Gateway for Containers (Application Gateway for Containers).
- O Application Gateway for Containers seleciona um dos muitos pods disponíveis para balancear a carga da solicitação. Neste exemplo, assumimos que o Pod C está selecionado entre os quatro pods disponíveis.
- O Pod C retorna uma resposta ao Application Gateway for Containers.
- Além da resposta de back-end do Pod C, o Application Gateway for Containers adiciona um cabeçalho Set-Cookie contendo um hash gerado exclusivamente usado para roteamento.
- O cliente envia outra solicitação para o Application Gateway for Containers junto com o cookie de afinidade de sessão definido na etapa anterior.
- O Application Gateway for Containers deteta o cookie e seleciona o Pod C para atender à solicitação.
- O Pod C responde ao Application Gateway for Containers.
- O Application Gateway for Containers retorna a resposta ao cliente
Detalhes de utilização
A afinidade de sessão é definida pelas seguintes propriedades e características:
Nome | Descrição |
---|---|
afinidadeTipo | Os valores válidos são application-cookie ou managed-cookie. |
cookieNome | Obrigatório se affinityType for application-cookie. Este é o nome do cookie. |
cookieDuração | Obrigatório se affinityType for application-cookie. Esta é a duração (tempo de vida) do cookie em segundos. |
No tipo de afinidade de cookie gerenciado, o Application Gateway 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
cookieName
propriedades e valores ecookieDuration
são descartados.
No tipo de afinidade de aplicativo, o nome do cookie e a duração (tempo de vida) devem ser explicitamente definidos.
Como configurar a afinidade de sessão
A afinidade de sessão pode ser definida em um recurso RoutePolicy , que tem como alvo um HTTPRoute definido. Você deve especificar sessionAffinity
com um affinityType
de ou application-cookie
managed-cookie
. Neste exemplo, usamos application-cookie
como affinityType e definimos explicitamente um nome e um tempo de vida do cookie.
Exemplo de comando 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