Поделиться через


Протокол WebSocket и Шлюз приложений для контейнеров

WebSockets, установленный в RFC6455, обеспечивает двустороннее взаимодействие между клиентом и сервером. В отличие от традиционного http-запроса или HTTPS, который, WebSockets позволяет браузеру устанавливать подключение и получать непрерывные данные с сервера, не требуя постоянного извлечения удаленного сервера или необходимости устанавливать несколько подключений в обоих направлениях (клиент к серверу и серверу к клиенту).

Преимущества WebSocket

Протокол WebSocket имеет несколько преимуществ по сравнению с традиционными HTTP-запросами, в том числе:

  • Совместимость браузера: почти все современные веб-браузеры поддерживают WebSockets.
  • Данные в режиме реального времени: WebSockets обеспечивают передачу данных в режиме реального времени между клиентом и сервером.
  • Эффективность: WebSockets устраняет необходимость непрерывного опроса серверов для проверки наличия обновлений.
  • Безопасность: WebSockets можно шифровать с помощью TLS и использовать стандартные HTTP-порты, такие как 80 и 443.
  • Гибкость: WebSockets можно использовать для различных приложений, включая чат, игры и финансовые торговые платформы.

Как работает протокол WebSocket

Чтобы установить подключение WebSocket, клиент и сервер обмениваются специальным подтверждением на основе протокола HTTP. В случае успешного выполнения протокол прикладного уровня "обновляется" с HTTP до WebSocket, используя ранее установленное соединение TCP. После этого протокол изменяется на WebSockets и трафик больше не передается по протоколу HTTP. Данные отправляются или получают с помощью протокола WebSocket обеими конечными точками, пока подключение WebSocket не будет закрыто.

На схеме показан клиент, взаимодействующий с веб-сервером, подключение к ПРОТОКОЛу HTTP, обновление подключения к протоколу WebSocket и продолжение обмена данными по протоколу WebSocket.

Примечание.

После обновления подключения до WebSocket в качестве посредника или завершения прокси-сервера Шлюз приложений для контейнеров будут отправлять данные, полученные от внешнего интерфейса в серверную часть, и наоборот, без каких-либо возможностей проверки или манипуляции. Поэтому любые манипуляции, такие как перезаписи заголовков, перезаписи URL-адресов или переопределение имени узла, не будут применяться после установки подключения WebSocket.

Подключения WebSocket могут находиться в виде обычного текста или зашифрованы по протоколу TLS. При установке подключения через обычный текст соединение устанавливается в формате ws://< fqdn>/path. При установке подключения по протоколу TLS подключение устанавливается в формате wss://< fqdn>/path.

Зонды работоспособности

Настройка не требуется для использования запроса WebSocket в Шлюз приложений для контейнеров, однако необходимо убедиться, что вы правильно настраиваете пробы работоспособности, чтобы серверная часть отображалась как работоспособная.

По умолчанию Шлюз приложений для контейнеров пытается инициировать подтверждение HTTP на внутренний порт, на котором запущена служба WebSocket. Во многих случаях это ошибочно обозначает серверную часть как неработоспособную, поэтому необходимо определить HealthCheckPolicy, чтобы убедиться, что проба работоспособности рассматривает использование пробы TCP.

Ниже приведен пример работоспособностиCheckPolicy для серверной части 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

Примечание.

WebSockets поддерживается только при использовании API шлюза для Шлюз приложений для контейнеров.

Метрики и мониторинг

Журналы диагностики.

Подключения WebSocket работают с помощью отдельного протокола. При запуске подключения браузер получает код состояния HTTP 101, указывающий на переход с HTTP на WebSocket и будет отражен в журнале доступа.

Сведения о подключении WebSocket записываются только при закрытии подключения. Это позволяет точно измерять длительность каждого соединения.

Следующие шаги

Дополнительные сведения о WebSockets и API шлюза