Node.js 从Kubernetes NGINX入口控制器公开服务时始终返回502坏网关

Node.js 从Kubernetes NGINX入口控制器公开服务时始终返回502坏网关,node.js,kubernetes,websocket,digital-ocean,nginx-ingress,Node.js,Kubernetes,Websocket,Digital Ocean,Nginx Ingress,我对在digital ocean的kubernetes集群中运行的NodeJS应用程序的请求有问题。每个请求都返回一个502坏网关错误。我不确定我错过了什么 这就是服务配置的样子 apiVersion:v1 种类:服务 元数据: 名称:服务api 名称空间:默认值 标签: 应用程序:服务api 规格: 类型:集群 端口: -名称:http 协议:TCP 港口:80 目标港:3000 选择器: 应用程序:服务api Ingress.yml看起来像这样 apiVersion:networking.

我对在digital ocean的kubernetes集群中运行的NodeJS应用程序的请求有问题。每个请求都返回一个
502坏网关错误
。我不确定我错过了什么

这就是服务配置的样子

apiVersion:v1 种类:服务 元数据: 名称:服务api 名称空间:默认值 标签: 应用程序:服务api 规格: 类型:集群 端口: -名称:http 协议:TCP 港口:80 目标港:3000 选择器: 应用程序:服务api Ingress.yml看起来像这样

apiVersion:networking.k8s.io/v1 种类:入口 元数据: 名称:服务api入口 注释: kubernetes.io/ingres.class:nginx cert-manager.io/cluster-issuer:letsencrypt prod nginx.ingres.kubernetes.io/limit-connections:'2' nginx.ingres.kubernetes.io/limit-rpm:'60' service.beta.kubernetes.io/do-loadbalancer-protocol:“http” service.beta.kubernetes.io/do-loadbalancer-algorithm:“循环” service.beta.kubernetes.io/do-loadbalancer-http2-ports:“443,80” service.beta.kubernetes.io/do-loadbalancer-tls-ports:“443” service.beta.kubernetes.io/do-loadbalancer-tls-passthrough:“true” 规格: tls: -主持人: -dev-api.service.com secretName:服务api tls 规则: -主机:“dev api.service.com” http: 路径: -路径类型:前缀 路径:“/” 后端: 服务: 名称:服务api 端口: 电话:80 每当我访问主机url时,都会出现502错误

这是nginx入口日志中显示的内容

2021/01/13 08:41:34 [error] 319#319: *31338 connect() failed (111: Connection refused) while connecting to upstream, client: IP, server: dev-api.service.com, request: "GET /favicon.ico HTTP/2.0", upstream: "http://10.244.0.112:3000/favicon.ico", host: "dev-api.service.com", referrer: "https://dev-api.service.com/status"

不需要特殊设置,404很可能来自您的实际后端。

可能是配置SSL passthru的注释吗

如果在入口控制器上配置了SSL passthru,则除了端口80外,您的服务还需要公开端口443。你基本上是说pod正在终止安全连接,而不是nginx

如果是这个问题,我们将解释50X错误,这表明后端出现问题,正如我们(与@Emmanuel Amodu一起)在评论中所讨论的:

错误是使用错误的端口连接到应用程序,端口是
4000
,而不是
service api
中定义的
3000

对于有类似问题的社区,请-调试的最重要步骤:

  • 检查netstat-工厂输出表
  • 检查Nginx配置:
    $kubectl exec-it-n--cat/etc/Nginx/Nginx.conf
  • 检查服务:
    $kubectl描述svc服务api

  • 是的,但在我的本地机器上websocket连接良好。你能共享netstat-plant输出表吗?@Malgorzata我不知道在kubernetes中如何做到这一点。但是从日志中可以看出,请求
    10.244.0.112
    中的内部IP与服务的集群IP不匹配。只需在节点命令行netstat-plant中执行此命令即可。还提供Nginx配置的输出:$kubectl exec-it-n--cat/etc/Nginx/Nginx。conf@Malgorzata您可以在这里找到它。您是否也可以粘贴命令$kubectl DESCRIPE svc service api的输出?我不确定这是否是问题所在。