ホールの一日を過ごした後、ついに gRPC が #dstack で動作するようになりました。 dstackゲートウェイは任意のTCPをTLSでラップできるため、うまくいくと思いました。 そうではありませんでした。
重要な詳細: gRPC は HTTP/2 で実行されます。 HTTP/2 は通常、TLS ハンドシェイク中に ALPN (アプリケーション層プロトコル ネゴシエーション) に依存します。
ALPN は、実際のデータを交換する前に、双方がどのプロトコル (HTTP/2 の場合は h2) を話すかに同意する瞬間と考えてください。 この手順が失敗すると、接続は HTTP/1.1 にフォールバックしますが、gRPC はこれを使用できません。
ゲートウェイが gRPC を正しく処理するには、次のことを行う必要があります。 1️⃣ HTTP/2 エンドツーエンドをサポート 2️⃣ TLS ハンドシェイク中に ALPN と h2 をネゴシエートする 3️⃣ gRPC のバイナリ フレーミングとトレーラーを保持する これらのいずれかを見逃すと、奇妙なハング、エラーの欠落、またはストリームの破損が表示されます。
674