RFC6455 で確立された WebSocket により、クライアントとサーバー間の双方向通信が可能になります。 従来の HTTP または HTTPS 要求とは異なり、WebSocket を使用すると、ブラウザーで接続を確立し、サーバーから継続的にデータを取得できます。リモート サーバーを常にプルしたり、双方向 (クライアントからサーバー、サーバーからクライアント) で複数の接続を確立したりする必要はありません。
WebSocket の利点
WebSocket プロトコルには、従来の HTTP 要求に比べて次のようないくつかの利点があります。
- ブラウザーの互換性: 最新の Web ブラウザーはほぼすべてが WebSocket をサポートしています。
- リアルタイム データ: WebSocket を使用すると、クライアントとサーバー間のリアルタイム データ転送が可能になります。
- 効率: WebSocket を使用すると、更新プログラムを確認するためにサーバーを継続的にポーリングする必要がなくなります。
- セキュリティ: WebSocket は TLS を使用して暗号化できます。また、80 や 443 などの標準の HTTP ポートを使用できます。
- 柔軟性: WebSocket は、チャット、ゲーム、金融取引プラットフォームなどのさまざまな用途に使用できます。
WebSocket プロトコルのしくみ
WebSocket の接続を確立するために、特定の HTTP ベースのハンドシェイクがクライアントとサーバーの間で交換されます。 成功すると、アプリケーション レイヤー プロトコルは、以前に確立された TCP 接続を使用して、HTTP から WebSockets に "アップグレード" されます。 その後は、プロトコルは WebSocket に変更され、トラフィックは HTTP 経由で流れなくなります。 WebSocket 接続が閉じられるまで、両方のエンドポイントで WebSocket プロトコルを使用してデータが送受信されます。
Note
接続が WebSocket にアップグレードされると、Application Gateway for Containers は中間または終端プロキシとして、検査や操作機能を使用せずに、フロントエンドから受信したデータをバックエンド (またはその逆方向) に送信します。 そのため、WebSocket 接続の確立後は、ヘッダーの書き換え、URL の書き換え、ホスト名のオーバーライドなどの操作は適用されません。
WebSocket 接続は、プレーンテキストで、または TLS 経由で暗号化して行うことができます。 プレーンテキスト経由で接続を確立する場合、接続は ws://<fqdn>/path の形式で確立されます。 TLS 経由で接続を確立する場合、接続は wss://<fqdn>/path の形式で確立されます。
正常性プローブ
Application Gateway for Containers で WebSocket 要求を利用するための構成は必要ありませんが、バックエンドの正常な状態が反映されるように正常性プローブを適切に構成する必要があります。
Application Gateway for Containers の既定では、WebSocket サービスを実行しているバックエンド ポートに対して HTTP ハンドシェイクの開始が試行されます。 多くの場合、この結果として誤ってバックエンドが異常であるとラベルが付けられます。そのため、正常性プローブが TCP プローブの使用を考慮するように HealthCheckPolicy を定義する必要があります。
WebSocket バックエンドの HealthCheckPolicy の例を次に示します。
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
Note
WebSocket は、Application Gateway for Containers に Gateway API を使用する場合にのみサポートされます。
メトリックと監視
診断ログ:
WebSocket 接続は、個別のプロトコルを使用して動作します。 接続を開始すると、ブラウザーは HTTP から WebSocket への切り替えを示す HTTP 101 状態コードを受け取り、アクセス ログに反映されます。
WebSocket 接続の詳細は、接続が閉じられたときにのみ記録されます。 これにより、各接続の継続時間を正確に測定することができます。
次のステップ
WebSocket と Gateway API の詳細については、こちらを参照してください