終於我們在 #dstack 中讓 gRPC 運作起來了,花了一整天的時間! 由於 dstack 閘道可以將任意 TCP 包裝在 TLS 中,我以為它會正常運作。 結果並沒有。
關鍵細節:gRPC 運行在 HTTP/2 上。 HTTP/2 通常在 TLS 握手期間依賴 ALPN(應用層協議協商)。
將 ALPN 視為雙方同意使用哪種協議(h2 代表 HTTP/2)以便在交換任何實際數據之前進行的時刻。 如果這一步失敗,連接將回退到 HTTP/1.1 — gRPC 無法使用這個版本。
要讓網關正確處理 gRPC,必須: 1️⃣ 支持 HTTP/2 端到端 2️⃣ 在 TLS 握手期間通過 ALPN 協商 h2 3️⃣ 保留 gRPC 的二進制框架和尾部 如果缺少其中任何一項,您將會看到奇怪的掛起、缺失的錯誤或損壞的流。
675