Persistência da sessão nos balanceadores de carga HTTP / S do GCP não funcionando como esperado

3

Estou trabalhando há anos com outros balanceadores de carga, então esperava que os balanceadores de carga do GCP funcionassem da mesma maneira que os outros ao usar configurações de persistência de sessão.

Infelizmente, a ativação de persistência de sessão para back-ends no GCP LB parece não enviar todas as solicitações de um determinado cliente para um único servidor de back-end (nem usando cookies ou opções de persistência de sessão IP)

É um bug / comportamento conhecido ou algo que eu possa resolver sozinho?

Eu fiz este teste rápido:

  • Eu criei um novo HTTP LB e atribuí um novo IP externo a ele.
  • Eu indiquei um serviço de back-end para um grupo de instâncias com 2 instâncias.
  • Como meu servidor de back-end está executando o apache e o mod_php, criei um script PHP simples (chamado get_up.php) para mostrar o endereço IP do servidor (veja o código abaixo)
  • Finalmente, eu corri um script de curl rápido dentro de um loop, apontando para o $ LBIP / get_ip.php para ver o que acontece.

Se eu fizer o mesmo, digamos, no Rackspace, obtenho sempre o mesmo IP que o resultado, mas no GCP eu vejo que posso acessar qualquer um dos meus dois servidores backend aleatoriamente.

Este é o meu script de teste PHP:

<?php
$realIP = file_get_contents("http://ipecho.net/plain");
echo "My Ip is " . $realIP;
echo "\n";
?>

E este é o meu teste:

➜  ~ while true; do curl -b cookie.txt -c cookie.txt $IP/get_ip.php; sleep 1 ; done
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.138.72
  • Editar - Enrole o comando para enviar cookies, com base no comentário do BillThor. Mesmos resultados.
  • Editar - Detalhes da solução.

A persistência de sessão funciona bem quando é usada com grupos de instâncias de zona única. Eu tive que sacrificar o uso de grupos de instâncias multi-zona até que isso fosse resolvido.

    
por qmaxquique 19.10.2017 / 01:12

2 respostas

2

Se você estiver usando cookies para persistência, será necessário fornecer um cookie jar para usar o curl. Caso contrário, cada solicitação parece estar vindo de um novo usuário. Tente um comando como:

while true; do -b cookie.txt -c cookie.txt curl $IP/get_ip.php; sleep 1 ; done
    
por 19.10.2017 / 01:21
0

Infelizmente, parece que a persistência da sessão ainda não está "disponível" com os balanceadores de carga do GCP. Para manter o token SAML entre meu IDP e os SPs, tive que instalar o servidor NGINX PLUS na frente.

Isso pode ser implantado usando o Cloud Launcher: NGINX PLUS

    
por 26.02.2018 / 21:57