1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Envoy: WebSocket と HTTP のアップグレード

Posted at

tldr

勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントはこちらのディレクトリ以下にあります(ライセンス:Apache License 2.0, NOTICE)。

WebSocket と HTTP のアップグレード

Envoy Upgrade のサポートは主に WebSocket を対象としていますが、WebSocket 以外のアップグレードにも使用できます。アップグレードは、HTTP ヘッダーとアップグレードペイロードの両方を HTTP フィルタチェーンを介して渡します。カスタムフィルタチェーンの有無にかかわらず upgrade_configs を設定できます。 upgrade_type のみが指定されている場合、アップグレードヘッダー、要求と応答の本文、および WebSocket ペイロードの両方がデフォルトの HTTP フィルタチェーンを通過します。アップグレードペイロードに HTTP 専用フィルタを使用しないようにするには、特定のアップグレードタイプ用にカスタムフィルタを設定します。これには、ルータフィルタのみを使用して WebSocket データをアップストリームに送信することが含まれます。

アップグレードはルートごとに有効または無効にできます。以下に示すように、ルートごとの有効化/無効化は自動的に HttpConnectionManager の設定を上書きしますが、カスタムフィルタチェーンは HttpConnectionManager ごとにのみ設定できます。

HCMアップグレード有効化 ルートアップグレード有効化 アップグレード有効化
T(デフォルト) T(デフォルト)T
T(デフォルト) F F
F T(デフォルト) T
F F F

アップグレードの統計はすべてまとめられているため、WebSocket の統計は downstream_cx_upgrades_total や downstream_cx_upgrades_active などの統計によって追跡されます。

H2ホップの取り扱い

Envoyは、一様な H2 メッシュを好む展開のために H2 ストリームを介した WebSocket のトンネリングをサポートします。これにより、たとえば、次の形式の配置が可能になります。

[Client] - HTTP / 1.1 - Front Envoy - HTTP / 2 - サイドカーEnvoy - H1 - App

この場合、クライアントがたとえば WebSocket を使用している場合、Websocket が機能的には上流のサーバーに到達するようにします。つまり、HTTP/2 ホップを通過する必要があります。

これは、拡張 CONNECT サポートを介して行われます。 WebSocket 要求は、元のアップグレードを示すプロトコルヘッダーを使用して HTTP/2 CONNECT ストリームに変換され、HTTP/2 ホップを通過し、HTTP/1 WebSocket アップグレードにダウングレードされます。これと同じ Upgrade-CONNECT-Upgrade 変換は、HTTP/1.1 メソッドが常に GET であると想定されているという文書化された欠陥とともに、すべての HTTP/2 ホップで実行されます。 WebSocket 以外のアップグレードでは有効な HTTP メソッド( POST )を使用でき、現在のアップグレード/ダウングレードメカニズムでは元のメソッドが削除され、最後の Envoy-Upstream ホップで Upgrade 要求が GET メソッドに変換されます。

H2 アップグレードパスは HTTP/1.1 に非常に厳密に準拠しているため、WebSocket のアップグレード要求または本文を含む応答を代理することはありません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?