Endlich haben wir gRPC in #dstack zum Laufen gebracht, nachdem wir einen ganzen Tag damit verbracht haben! Da das dstack-Gateway beliebiges TCP in TLS einwickeln kann, nahm ich an, dass es einfach funktionieren würde. Das tat es nicht.
Das entscheidende Detail: gRPC läuft über HTTP/2. HTTP/2 verlässt sich typischerweise auf ALPN (Application-Layer Protocol Negotiation) während des TLS-Handshakes.
Betrachten Sie ALPN als den Moment, in dem beide Seiten zustimmen, welches Protokoll sie sprechen (h2 für HTTP/2), bevor sie tatsächliche Daten austauschen. Wenn dieser Schritt fehlschlägt, fällt die Verbindung auf HTTP/1.1 zurück – was gRPC nicht verwenden kann.
Damit ein Gateway gRPC korrekt verarbeiten kann, muss es: 1️⃣ HTTP/2 End-to-End unterstützen 2️⃣ h2 mit ALPN während des TLS-Handshakes aushandeln 3️⃣ gRPCs binäre Rahmen und Trailer bewahren Wenn eines dieser Dinge fehlt, werden Sie seltsame Hänger, fehlende Fehler oder beschädigte Streams sehen.
685