gRPC 部署意外 HTTP/1

问题描述 投票:0回答:1

我对 gRPC 非常陌生,正在尝试将 gRPC 部署到我们的基础设施中,看看我们是否可以支持它。我已经部署了这个应用程序: https://hub.docker.com/r/grpc/java-example-hostname/tags

当 Pod 启动时,它显示它正在侦听端口 50051,然后当我尝试使用以下命令调用服务时:

docker run fullstorydev/grpcurl testgrpc.{url}:443 list

这会导致应用程序返回此消息:

**Mar 15, 2024 4:00:18 PM io.grpc.netty.shaded.io.grpc.netty.NettyServerTransport notifyTerminated
INFO: Transport failed
io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: Unexpected HTTP/1.x request: POST /grpc.reflection.v1.ServerReflection/ServerReflectionInfo **

这是我的基础设施不支持 HTTP/2 的错误吗?我可以假设该应用程序在我的基础设施中正常运行吗?我不确定是否需要部署客户端和服务器,或者该映像是否能够创建正常运行的 gRCP 应用程序所需的所有内容。

我还尝试通过浏览器连接到该 URL,这会返回一个不同的错误:

net/http: HTTP/1.x transport connection broken: malformed HTTP status code "\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x0f\x00\x01\x00\x00+\a\x00\x00\x00\x00\x00\x7f\xff\xff\xff\x00\x00\x00\x01Unexpected"

我无法使用邮递员进行测试,因为我无法生成原型文件

此外,当我使用 https://tools.keycdn.com/http2-test 检查 URL 时,它表示支持 http/2 协议。

非常感谢大家提供的任何帮助!!!

grpc grpc-java
1个回答
0
投票

我想我遇到了同样的问题,设置了一个没有 TLS 的 HTTP/2 端点。在C#中可能需要将http2设置为监听协议。可以如下设置。

options.ListenLocalhost(*PORT*, listenOptions =>
{
    listenOptions.Protocols = HttpProtocols.Http2;
});
© www.soinside.com 2019 - 2024. All rights reserved.