Compartilhar via


Protocolo WebSocket e Gateway de Aplicativo para Contêineres

Os WebSockets, estabelecidos em RFC6455, habilitam a comunicação bidirecional entre um cliente e um servidor. Ao contrário de uma solicitação HTTP ou HTTPS tradicional que, os WebSockets permitem que o navegador estabeleça uma conexão e receba dados contínuos de um servidor, sem precisar efetuar pull constante do servidor remoto ou a necessidade de 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 dão suporte a WebSockets.
  • Dados em tempo real: os WebSockets habilitam a transferência de dados em tempo real entre o cliente e o servidor.
  • Eficiência: os WebSockets eliminam a necessidade de sondar continuamente servidores para verificar se há atualizações.
  • Segurança :os WebSockets podem ser criptografados usando TLS e usar portas HTTP padrão, como 80 e 443.
  • Flexibilidade: os WebSockets podem ser usados para uma variedade de aplicativos, incluindo chat, jogos e plataformas de negociação financeira.

Como funciona o protocolo de WebSocket

Para estabelecer uma conexão WebSocket, um handshake baseado em HTTP é trocado entre o cliente e o servidor. Em caso de êxito, o protocolo de camada de aplicativo é "atualizado" de HTTP para WebSockets usando a conexão TCP estabelecida anteriormente. Uma vez que 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 com o protocolo WebSocket e continuando a comunicação pelo protocolo WebSocket.

Observação

Após a conexão ser atualizada para WebSocket, como um proxy intermediário/terminal, o Gateway de Aplicativos para contêineres enviará os dados recebidos do front-end para o back-end e vice-versa, sem qualquer capacidade de inspeção ou manipulação. Portanto, qualquer manipulação, como Regravações de cabeçalho, Regravações de URL ou Substituição de Nome de Host não será aplicada após o estabelecimento de uma conexão WebSocket.

As conexões WebSocket podem estar em texto sem formatação ou criptografadas por TLS. Quando uma conexão é estabelecida por 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 wss://<fqdn>/path.

Investigações de integridade

Nenhuma configuração é necessária para aproveitar uma solicitação WebSocket no Gateway de Aplicativo para contêineres, no entanto, garanta configurar corretamente investigações de integridade para garantir que o back-end seja refletido como íntegro.

Por padrão, o Gateway de Aplicativos para contêineres tenta iniciar um handshake HTTP para a porta de back-end que executa o serviço do WebSocket. Em muitos casos, isso rotula erroneamente o back-end como não íntegro, portanto, um HealthCheckPolicy deve ser definido para garantir que a investigação de integridade considere o uso de uma investigação do TCP.

Veja a seguir um exemplo de HealthCheckPolicy 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

Observação

O WebSockets só têm suporte ao usar a API de Gateway para Gateway de Aplicativo para contêineres.

Monitoramento e métricas

Logs de Diagnóstico:

As conexões do 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 do WebSocket são registrados somente quando a conexão é fechada. Isso permite que a duração de cada conexão seja medida com precisão.

Próximas etapas

Saiba mais sobre os WebSockets e a API de Gateway