Configurando a afinidade de sessão

O carregamento de um site geralmente requer a busca de vários ativos de um servidor da web. A afinidade de sessão CIS minimiza solicitações de rede redundantes ao direcionar automaticamente solicitações do mesmo cliente para o mesmo servidor da web de origem.

O CIS configura um cookie na resposta inicial para o cliente. O uso do cookie em solicitações de clientes subsequentes assegura que essas solicitações sejam enviadas para a mesma origem, a menos que a origem esteja indisponível.

Quando ativada, a afinidade de sessão do CIS faz o seguinte:

  • Quando um cliente faz sua primeira solicitação, o CIS configura um cookie CFLib no cliente. O cookie codifica a origem para a qual a solicitação é encaminhada.
  • As solicitações subsequentes do cliente são encaminhadas para essa origem pela duração do cookie e desde que o servidor de origem permaneça operacional.
  • Se o cookie expirar ou o servidor de origem ficar fora de operação, o CIS configurará uma nova codificação decookie na origem de failover apropriada.

Todas as sessões são padronizadas como 23 horas, a menos que um TTL de sessão customizada seja especificado (em segundos) entre 30 minutos e 7 dias. Um cookie de afinidade de sessão é necessário para honrar o TTL. O cookie de sessão é seguro quando " Always Use HTTPS está ativado. Além disso, HttpOnly está sempre ativado para o cookie para evitar ataques de cross-site scripting.

Definindo a afinidade da sessão a partir da CLI

Ao criar um balanceador de carga global a partir da CLI, execute as seguintes etapas para definir a afinidade da sessão:

  1. Efetue login em sua conta do IBM Cloud.
  2. Criar um balanceador de carga global.
  3. Defina as seguintes variáveis da CLI:

Se você precisar de uma configuração específica SameSite nos cookies de afinidade de sessão, o CIS recomenda que você forneça valores para samesite e secure diferentes de Auto, em vez de confiar no comportamento padrão. Desta forma, o valor do atributo do cookie SameSite não muda devido a alterações na configuração (ou seja, Sempre usar HTTPS ).

session_affinity: os valores válidos são cookie, none.

ttl: Tempo, em segundos, até que o cookie de afinidade de sessão deste balanceador de carga expire após ter sido criado. Valores válidos entre ' 1800, ' 604800. O padrão é 82800.

session_affinity_attributes: Atributos de um cookie de afinidade de sessão.

samesite

Os valores válidos são: * Auto (padrão): Se Always Use HTTPS estiver ativado, os cookies de afinidade de sessão usarão o modo Lax ; se estiver desativado, os cookies usarão o modo None. * None: Os cookies são enviados com todas as solicitações. * Lax: Os cookies são enviados somente para o domínio apex (como ' example.com). * Strict: Os cookies são criados pela primeira parte (o domínio visitado).

secure

Os valores válidos são: * Auto (padrão): Se Always Use HTTPS estiver ativado, os cookies de afinidade de sessão usarão secure no atributo samesite ; se estiver desativado, os cookies não usarão secure. * Always secure está sempre definido, o que significa que o cookie só é enviado em conexões HTTPS. * Never secure nunca é definido, permitindo que os cookies sejam enviados por conexões HTTPS e HTTP.

drain_duration

Opcional. Tempo, em segundos, em que a origem drenará as sessões ativas. Após o término do tempo, todas as sessões existentes são encerradas. Esse campo é usado somente quando a afinidade de sessão está ativada no balanceador de carga.

zero_downtime_failover

Opcional. Envia automaticamente o tráfego para endpoints em um pool durante problemas transitórios de rede. Os valores de valor são: * none (padrão): Não ocorre failover e os erros podem ser exibidos aos usuários. * temporary: O tráfego é enviado para outros pontos de extremidade até que o ponto de extremidade originalmente fixado esteja disponível. * sticky: O cookie de afinidade da sessão é atualizado e as solicitações subsequentes são enviadas para o novo endpoint, avançando conforme necessário.

O failover persistente sem tempo de inatividade não é compatível com a afinidade de sessão por um cabeçalho HTTP.

Por exemplo:

ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'

Definindo a afinidade da sessão com a API

A afinidade de sessão é uma propriedade dos balanceadores de carga globais, que você pode definir com os seguintes pontos de extremidade:

Personalize o comportamento da afinidade de sessão usando os parâmetros " session_affinity, " session_affinity_ttl e " session_affinity_attributes.

Para ativar a afinidade de sessão por cabeçalho HTTP, defina o valor session_affinity como header e adicione seus Nomes de cabeçalho HTTP a session_affinity_attributes.headers.

Ao criar um balanceador de carga global usando a API, execute as etapas a seguir para configurar a afinidade de sessão:

  1. Configure seu ambiente de API com as variáveis corretas.

  2. Armazene os valores a seguir nas variáveis a serem usadas no comando da API:

    • session_affinity, que especifica o tipo de afinidade de sessão que o balanceador de carga usa, a menos que especificado como "none" ou "default". Valores válidos são none, cookie, ip_cookie.
    • session_affinity_ttl, que é o tempo de vida da afinidade de sessão
    • session_affinity_attributes que incluem:
      • samesite configura o atributo SameSite no cookie de afinidade.. Os valores válidos são ' Auto, ' Lax, ' None, ' Strict; o padrão é ' Auto.

      • secure configura o atributo Secure no cookie de afinidade de sessão. Os valores válidos são ' Auto, ' Always, ' Never; o padrão é ' Auto.

      • drain_duration é o valor da duração do dreno em segundos.

      • zero_downtime_failover (opcional) envia automaticamente o tráfego para os pontos de extremidade em um pool durante problemas de rede transitórios. Os valores de valor são ' temporary e ' sticky; o padrão é ' none.

        O failover persistente sem tempo de inatividade não é compatível com a afinidade de sessão por um cabeçalho HTTP.

  3. Quando todas as variáveis forem iniciadas, crie o balanceador de carga global com afinidade de sessão:

curl -X POST   https://api.cis.cloud.ibm.com/v1/:crn/zones/:zone_id/load_balancers   -H 'content-type: application/json'   -H 'x-auth-user-token: Bearer xxxxxx'   -d '{
    "description": "",
    "proxied": true,
    "enabled": true,
    "name": "www.example.com",
    "session_affinity": "none",
    "session_affinity_ttl": 5000,
    "steering_policy": "geo",
    "fallback_pool": "4112ba6c2974ec43886f90736968e838",
    "default_pools": [
        "6563ebae141638f92ebbdc4a821bef8c",
        "4112ba6c2974ec43886f90736968e838"
    ],
    "pop_pools": {},
    "region_pools": {
        "EEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "ENAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ],
        "WEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "WNAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ]
    }
}'

Se você definir samesite como None em sua solicitação de API, não poderá definir secure como Never.