Нарешті ми отримали gRPC, який працює в #dstack році, провівши день! Оскільки шлюз dstack може обгортати довільний TCP у TLS, я припускав, що це просто працюватиме. Цього не сталося.
Ключова деталь: gRPC працює на HTTP/2. HTTP/2 зазвичай покладається на ALPN (Application-Layer Protocol Negotiation) під час рукостискання TLS.
Думайте про ALPN як про момент, коли обидві сторони домовляються, за яким протоколом говорити (h2 для HTTP/2), перш ніж вони обмінюються будь-якими фактичними даними. Якщо цей крок не вдається, з'єднання повертається до HTTP/1.1 — який gRPC не може використовувати.
Щоб шлюз правильно обробляв gRPC, він повинен: 1️⃣ Підтримка HTTP/2 наскрізний 2️⃣ Домовляйтеся про h2 з ALPN під час рукостискання TLS 3️⃣ Збережіть двійкове обрамлення gRPC і трейлери Пропустіть будь-який з них, і ви побачите дивні зависання, пропущені помилки або перервані потоки.
673