通过kubernetes Nginx连接到gRPC服务

时间:2019-05-15 13:18:16

标签: nginx kubernetes grpc rancher grpc-java

我在本地kubernetes集群中部署了gRPC服务(春季启动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服务的入口,并且它可以正常工作。

有什么问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

我已解决此问题,并重新测试了其他配置。

有效注释为:

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

不是Kubernetes documentation中使用的注释。