Проксирование gRPC
gRPC — это независимый от языка программирования, высокопроизводительный фреймворк удалённого вызова процедур (RPC). Он
Введение
gRPC — это независимый от языка программирования, высокопроизводительный фреймворк удалённого вызова процедур (RPC). Он построен поверх HTTP/2 и может проксироваться через YARP. Хотя YARP не обязательно должен быть осведомлён о самих сообщениях gRPC, необходимо убедиться, что включён нужный протокол HTTP. gRPC требует HTTP/2, и вызовы gRPC завершатся ошибкой, если YARP не настроен на корректную отправку и приём запросов HTTP/2.
Настройка входящих протоколов YARP
В большинстве сценариев gRPC требует HTTP/2. HTTP/1.1 и HTTP/2 включены по умолчанию на серверах ASP.NET Core (интерфейсной части YARP), но для HTTP/2 требуется https (TLS), поэтому YARP должен прослушивать URL-адрес https://.
HTTP/2 поверх http (без TLS) поддерживается только на Kestrel и требует специальных настроек. Дополнительные сведения см. в статье gRPC services with ASP.NET Core.
Ниже показана настройка Kestrel для использования HTTP/2 поверх http (без TLS):
JSON {
"Kestrel": {
"Endpoints": {
"http": {
"Url": "http://localhost:5000",
"Protocols": "Http2"
}
}
}
}Настройка исходящих протоколов YARP
YARP автоматически согласовывает HTTP/1.1 или HTTP/2 для исходящих проксируемых запросов, но только для https (TLS). Для HTTP/2 поверх http (без TLS) требуются дополнительные настройки. Обратите внимание, что исходящие протоколы не зависят от входящих. Например, https может использоваться для входящего
соединения, а http — для исходящего; это называется завершением TLS (TLS termination). Подробности о настройке
см. в статье YARP HTTP Client Configuration.
Ниже показано, как настроить исходящий проксируемый запрос на использование HTTP/2:
JSON"cluster1": {
"HttpRequest": {
"Version": "2",
"VersionPolicy": "RequestVersionExact"
},
"Destinations": {
"cluster1/destination1": {
"Address": "http://localhost:6000/"
}
}
},gRPC-Web
gRPC-Web — это альтернативный формат передачи данных для gRPC, совместимый с HTTP/1.1.
application/grpc — так обычно используется gRPC поверх HTTP/2. application/grpc-web — gRPC-Web изменяет протокол gRPC, делая его совместимым с HTTP/1.1. gRPC-Web можно использовать в большем числе сценариев. gRPC-Web можно применять в браузерных приложениях и в сетях без полной поддержки HTTP/2. Две расширенные возможности gRPC не поддерживаются: клиентская потоковая передача (client streaming) и двунаправленная потоковая передача (bidirectional streaming).
gRPC-Web можно проксировать с помощью конфигурации YARP по умолчанию без каких-либо особых условий.
Автор подготовил эту статью с помощью ИИ. Подробнее