W końcu udało nam się uruchomić gRPC w #dstack po spędzeniu całego dnia! Ponieważ brama dstack może owinąć dowolny TCP w TLS, założyłem, że po prostu zadziała. Nie zadziałało.
Kluczowy szczegół: gRPC działa na HTTP/2. HTTP/2 zazwyczaj polega na ALPN (Negocjacja protokołu warstwy aplikacji) podczas handshake TLS.
Myśl o ALPN jako o momencie, w którym obie strony zgadzają się, jaki protokół będą używać (h2 dla HTTP/2), zanim wymienią jakiekolwiek rzeczywiste dane. Jeśli ten krok się nie powiedzie, połączenie wraca do HTTP/1.1 — którego gRPC nie może używać.
Aby brama mogła poprawnie obsługiwać gRPC, musi: 1️⃣ Obsługiwać HTTP/2 end-to-end 2️⃣ Negocjować h2 z ALPN podczas handshake TLS 3️⃣ Zachować binarne ramki i przyczepy gRPC Brak któregokolwiek z tych elementów spowoduje dziwne zawieszenia, brakujące błędy lub uszkodzone strumienie.
679