Freigeben über


WebSocket-Protokoll und Anwendungsgateway für Container

WebSockets, die in RFC6455 eingerichtet wurden, ermöglichen die bidirektionale Kommunikation zwischen einem Client und einem Server. Im Gegensatz zu einer herkömmlichen HTTP- oder HTTPS-Anforderung ermöglichen WebSockets dem Browser, eine Verbindung herzustellen und kontinuierlich Daten von einem Server zu empfangen, ohne den Remoteserver ständig abfragen oder mehrere Verbindungen in beide Richtungen (vom Client zum Server und vom Server zum Client) aufbauen zu müssen.

WebSocket-Vorteile

Das WebSocket-Protokoll bietet gegenüber herkömmlichen HTTP-Anforderungen mehrere Vorteile, darunter:

  • Browserkompatibilität: Fast alle modernen Webbrowser unterstützen WebSockets.
  • Echtzeitdaten: WebSockets ermöglichen die Datenübertragung in Echtzeit zwischen Client und Server.
  • Effizienz: WebSockets vermeiden die Notwendigkeit, kontinuierlich Server abzufragen, um nach Updates zu suchen.
  • Sicherheit: WebSockets können mithilfe von TLS verschlüsselt und standardmäßige HTTP-Ports wie 80 und 443 verwendet werden.
  • Flexibilität: WebSockets können für eine Vielzahl von Anwendungen verwendet werden, einschließlich Chat, Gaming und Finanzhandelsplattformen.

Funktionsweise des WebSocket-Protokolls

Um eine WebSocket-Verbindung herzustellen, wird ein bestimmter HTTP-basierter Handshake zwischen dem Client und dem Server ausgetauscht. Bei erfolgreicher Ausführung wird das Protokoll der Anwendungsebene von HTTP auf WebSockets mit der zuvor eingerichteten TCP-Verbindung "aktualisiert". Sobald dies geschieht, wird das Protokoll in WebSockets geändert, und der Datenverkehr fließt nicht mehr über HTTP. Daten werden mithilfe des WebSocket-Protokolls von beiden Endpunkten gesendet oder empfangen, bis die WebSocket-Verbindung geschlossen wird.

Diagramm zeigt einen Client, der mit einem Webserver interagiert, eine Verbindung mit HTTP herstellt, die Verbindung mit dem WebSocket-Protokoll aktualisiert und die Kommunikation über das WebSocket-Protokoll fortgesetzt wird.

Hinweis

Nachdem eine Verbindung auf WebSocket aktualisiert wurde, sendet das Anwendungsgateway für Container als Zwischen-/Endproxy die vom Frontend empfangenen Daten an das Back-End und umgekehrt, ohne dass eine Überprüfungs- oder Manipulationsfunktion erforderlich ist. Daher gelten alle Manipulationen wie "Header Rewrites", "URL Rewrites" oder "Overriding Hostname" nach dem Herstellen einer WebSocket-Verbindung nicht.

WebSocket-Verbindungen können entweder im Nur-Text-Format oder über TLS verschlüsselt sein. Wenn eine Verbindung über Klartext hergestellt wird, wird die Verbindung im Format ws://<fqdn>/path hergestellt. Wenn eine Verbindung über TLS hergestellt wird, wird die Verbindung im Format wss://< fqdn>/path hergestellt.

Gesundheitsprüfungen

Es ist keine Konfiguration erforderlich, um eine WebSocket-Anforderung in Application Gateway für Container zu nutzen. Sie müssen jedoch sicherstellen, dass Sie Integritätsüberprüfungen ordnungsgemäß konfigurieren, damit das Back-End als fehlerfrei angezeigt wird.

Standardmäßig versucht das Anwendungsgateway für Container, einen HTTP-Handshake an den Back-End-Port zu initiieren, der den WebSocket-Dienst ausführt. In vielen Fällen kennzeichnet dies das Backend fälschlicherweise als fehlerhaft, sodass eine HealthCheckPolicy definiert werden sollte, damit die Gesundheitsüberprüfung die Nutzung eines TCP-Probes berücksichtigt.

Hier ist ein Beispiel für eine HealthCheckPolicy für ein WebSocket-Back-End.

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

Hinweis

WebSockets werden nur unterstützt, wenn die Gateway-API für Application Gateway für Container verwendet wird.

Metriken und Überwachung

Diagnoseprotokolle:

WebSocket-Verbindungen werden mit einem eindeutigen Protokoll ausgeführt. Beim Initiieren der Verbindung empfängt der Browser einen HTTP 101-Statuscode, der den Wechsel von HTTP zu WebSocket angibt und im Zugriffsprotokoll angezeigt wird.

Die Details der WebSocket-Verbindung werden nur aufgezeichnet, wenn die Verbindung geschlossen wird. Dadurch kann die Dauer jeder Verbindung genau gemessen werden.

Nächste Schritte

Weitere Informationen zu WebSockets und Gateway-API