nginx - 通过 kubernetes nginx 连接到 gRPC 服务
问题描述
我在我的本地 kubernetes 集群中部署了一个 gRPC 服务(spring boot docker 映像)。我按照这个文档正确配置了部署、服务和入口 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文档中使用的注释。
推荐阅读
- json - Windows 终端选项卡快捷方式不起作用,类型不正确,预期对象
- java - 数据库中已经有一个名为“DATABASECHANGELOGLOCK”的对象
- google-apps-script - 如何在定期的 google meet 中查看学生的出勤情况?
- powerbi - Power BI Embedded 日期不变
- javascript - 无法定义变换:scale(); 在 CSS 中使用事件监听器 (js)
- xamarin - 从视图中删除 UITextView
- java - 请求缺少所需的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据(部署)
- processing - p5.js 中 frameCount 和旋转功能的概念清晰
- c++ - 禁止在控制台上登录 ceres
- utf-8 - 如何在 Windows Terminal App(UWP) 中将默认编码更改为 UTF-8