通过 kubernetes nginx 连接到 gRPC 服务
Connecting to a gRPC service through kubernetes nginx
我在我的本地 kubernetes 集群中部署了 gRPC 服务(spring 启动 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.12
和 rancher/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 服务的入口并且它有效。
知道出了什么问题吗?
我发现入口资源有问题。
尽管 tls
配置,nginx 配置没有监听 443。我的 secret
有问题
我修复了这个问题并重新测试了不同的配置。
工作注释是:
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/grpc-backend: "true"
哪些不是 kubernetes 中使用的注解documentation。
我在我的本地 kubernetes 集群中部署了 gRPC 服务(spring 启动 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.12
和 rancher/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 服务的入口并且它有效。
知道出了什么问题吗?
我发现入口资源有问题。
尽管 tls
配置,nginx 配置没有监听 443。我的 secret
我修复了这个问题并重新测试了不同的配置。
工作注释是:
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/grpc-backend: "true"
哪些不是 kubernetes 中使用的注解documentation。