Compartilhar via


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:

Um diagrama ilustrando a afinidade de sessão do Gateway de Aplicativos para contêineres.

As seguintes etapas são descritas no diagrama anterior:

  1. Um cliente inicia uma solicitação para um front-end do Gateway de Aplicativos para contêineres.
  2. 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.
  3. O Pod C retorna uma resposta ao Gateway de Aplicativos para contêineres.
  4. 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.
  5. 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.
  6. O Gateway de Aplicativos para contêineres detecta o cookie e seleciona o Pod C para atender à solicitação.
  7. O Pod C responde ao Gateway de Aplicativos para contêineres.
  8. 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 e cookieDuration 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