【问题标题】:Connecting to a gRPC service through kubernetes nginx通过 kubernetes nginx 连接到 gRPC 服务
【发布时间】:2019-05-15 13:18:16
【问题描述】:

我在我的本地 kubernetes 集群中部署了一个 gRPC 服务(spring boot docker 映像)。我按照documentation 正确配置了部署、服务和入口 kubernetes 清单。

我尝试使用 grpcurl 测试我的服务:

grpcurl -insecure fortune-teller.mydomain.cloud:443 build.stack.fortune.FortuneTeller/Predict

请求仍然停留了几分钟。

在入口日志(启用调试)中,我看到客户端超时:

client timed out (110: Connection timed out), client: 1.2.3.4, server: _, request: "POST /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo HTTP/2.0", host: "fortune-teller.mydomain.cloud:443"

在入口日志中超时 4 次后,命令在客户端结束:

Error invoking method "build.stack.fortune.FortuneTeller/Predict": failed to query for service descriptor "build.stack.fortune.FortuneTeller": rpc error: code = Internal desc = stream terminated by RST_STREAM with error code: PROTOCOL_ERROR

我使用nginx/1.13.12rancher/nginx-ingress-controller:0.16.2-rancher1 图像。

在注释级别,我测试了:

kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"

nginx.ingress.kubernetes.io/grpc-backend: "true"

两者的结果相同(超时)。

注意:我绕过了入口,直接使用 kubernetes 服务 DNS 测试另一个 gRPC 服务,它可以工作。

知道出了什么问题吗?

【问题讨论】:

    标签: nginx kubernetes grpc rancher grpc-java


    【解决方案1】:

    我在入口资源中发现了一个问题。

    尽管有tls 配置,但nginx 配置没有监听443。我的secret 有问题

    我修复了这个问题并重新测试了我的不同配置。

    工作注释是:

    metadata:
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/grpc-backend: "true"
    

    哪些不是 kubernetes documentation 中使用的注解。

    【讨论】:

    • 你从哪里得到注释grpc-backend?。我试过了,还是不行
    猜你喜欢
    • 2021-06-28
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 2021-07-24
    • 2018-07-09
    • 2018-10-07
    • 2019-03-30
    相关资源
    最近更新 更多