Äntligen fick vi gRPC att fungera i #dstack efter att ha tillbringat en hel dag! Eftersom dstack-gatewayen kan linda in godtycklig TCP i TLS, antog jag att det bara skulle fungera. Det gjorde det inte.
Den viktigaste detaljen: gRPC körs på HTTP/2. HTTP/2 förlitar sig vanligtvis på ALPN (Application-Layer Protocol Negotiation) under TLS-handskakningen.
Tänk på ALPN som det ögonblick då båda sidor kommer överens om vilket protokoll som ska talas (h2 för HTTP/2) innan de utbyter några faktiska data. Om det här steget misslyckas återgår anslutningen till HTTP/1.1 – som gRPC inte kan använda.
För att en gateway ska kunna hantera gRPC korrekt måste den: 1️⃣ Stöd HTTP/2 från början till slut 2️⃣ Förhandla h2 med ALPN under TLS-handskakningen 3️⃣ Bevara gRPC:s binära inramning och trailers Om du missar någon av dessa kommer du att se konstiga hängningar, saknade fel eller trasiga strömmar.
682