Partilhar via


Protocolo WebSocket e Gateway de Aplicação para Contentores

Os WebSockets, estabelecidos em RFC6455, permitem a comunicação bidirecional entre um cliente e um servidor. Ao contrário de uma solicitação HTTP ou HTTPS tradicional, os WebSockets permitem que o navegador estabeleça uma conexão e receba dados contínuos de um servidor, sem ter que puxar constantemente o servidor remoto ou precisar estabelecer várias conexões em ambas as direções (cliente para servidor e servidor para cliente).

Benefícios do WebSocket

O protocolo WebSocket tem vários benefícios em relação às solicitações HTTP tradicionais, incluindo:

  • Compatibilidade do navegador: Quase todos os navegadores da Web modernos suportam WebSockets.
  • Dados em tempo real: WebSockets permitem a transferência de dados em tempo real entre cliente e servidor.
  • Eficiência: WebSockets eliminam a necessidade de sondar continuamente os servidores para verificar se há atualizações.
  • Segurança: WebSockets podem ser criptografados usando TLS e usar portas HTTP padrão, como 80 e 443.
  • Flexibilidade: WebSockets podem ser usados para uma variedade de aplicações, incluindo chat, jogos e plataformas de negociação financeira.

Como funciona o protocolo WebSocket

Para estabelecer uma conexão WebSocket, um handshake específico baseado em HTTP é trocado entre o cliente e o servidor. Se bem-sucedido, o protocolo de camada de aplicativo é "atualizado" de HTTP para WebSockets, usando a conexão TCP estabelecida anteriormente. Quando isso ocorre, o protocolo é alterado para WebSockets e o tráfego não flui mais por HTTP. Os dados são enviados ou recebidos usando o protocolo WebSocket por ambos os pontos de extremidade até que a conexão WebSocket seja fechada.

O diagrama mostra um cliente interagindo com um servidor Web, conectando-se com HTTP, atualizando a conexão para o protocolo WebSocket e continuando a comunicação através do protocolo WebSocket.

Nota

Depois que uma conexão é atualizada para WebSocket, como um proxy intermediário/terminador, o Application Gateway for Containers enviará os dados recebidos do frontend para o backend e vice-versa, sem qualquer capacidade de inspeção ou manipulação. Portanto, quaisquer manipulações como Regravações de Cabeçalho, Regravações de URL ou Substituição de Nome de Host não serão aplicadas após o estabelecimento de uma conexão WebSocket.

As conexões WebSocket podem ser em texto simples ou criptografadas por TLS. Quando uma conexão é estabelecida em texto sem formatação, a conexão é estabelecida no formato de ws://< fqdn>/path. Quando uma conexão é estabelecida por TLS, a conexão é estabelecida no formato de wss://< fqdn>/path.

Sondas de Saúde

Nenhuma configuração é necessária para aproveitar uma solicitação WebSocket no Application Gateway for Containers, no entanto, você deve garantir que configure corretamente as sondas de integridade para garantir que o back-end seja refletido como íntegro.

Por padrão, o Application Gateway for Containers tenta iniciar um handshake HTTP para a porta de back-end que executa o serviço WebSocket. Em muitos casos, isso rotula erroneamente o back-end como não íntegro, portanto, uma "HealthCheckPolicy" deve ser definida para garantir que a verificação de integridade leve em consideração o uso de uma sonda TCP.

Aqui está um exemplo de uma Política de Verificação de Saúde para um back-end WebSocket.

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: HealthCheckPolicy
metadata:
  name: websockets-health-check-policy
  namespace: test-infra
spec:
  targetRef:
    group: ""
    kind: Service
    name: websockets-backend
    namespace: test-infra
  default:
    interval: 5s
    timeout: 3s
    healthyThreshold: 1
    unhealthyThreshold: 1
    http:
      path: /health 
EOF

Nota

Os WebSockets são suportados apenas quando se utiliza a API do Gateway para o Application Gateway for Containers.

Métricas e Monitoramento

Logs de diagnóstico:

As conexões WebSocket operam usando um protocolo distinto. Ao iniciar a conexão, o navegador recebe um código de status HTTP 101, indicando a mudança de HTTP para WebSocket e será refletido no log de acesso.

Os detalhes da conexão WebSocket são gravados somente quando a conexão é fechada. Isso permite que a duração de cada conexão seja medida com precisão.

Próximos passos

Saiba mais sobre WebSockets e API de gateway