Kubernetes 中的 Nginx Ingress 尝试访问前端时出现 502 Bad Gateway 错误

问题描述 投票:0回答:2

我有一个安装了 k3s 的 Linux 虚拟机,并安装了 Nginx-Ingress 控制器。我在 Kubernetes 集群中设置 Nginx Ingress 控制器时遇到问题。我的目标是在前端设置 https,但通过 Ingress URL 访问我的应用程序时,我不断遇到持续的 502 Bad Gateway 错误 (

app.192.168.[something].nip.io
)。

这些是前端服务的详细信息。 (kubectl 描述 svc)

这些都是豆荚。

(kubectl get svc -o Wide)的结果

Ingress-NginX 的错误日志显示:

connect() failed (111: Connection refused) while conencting to upstream, client: 192.168.223.229, server: app.192.168.[something].nip.io, request:
"GET / HTTP/ 2.0", upstream:  "http://10.43.141.56:3000/", host: "app.192.168.[something].nip.io"

前端运行,pod 启动,我不知道从这里去哪里。

Ingress 资源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
  ingressClassName: nginx
  tls:
  - secretName: dailygrind-tls
    hosts:
    - app.192.168.[something].nip.io
  rules:
  - host: app.192.168.[something].nip.io
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: frontend
            port:
              number: 3000
kubernetes nginx kubernetes-ingress nginx-ingress k3s
2个回答
0
投票

请注意,位于

frontend
命名空间中的服务
default
LoadBalancer
类型,我认为它应该是
ClusterIP
,因为您不想公开公开您的服务,然后通过入口连接到它。


0
投票

该问题与 Nginx Ingress Controller 和在端口 3000 上运行的后端服务(前端)之间的通信有关。连接到上游时出现错误消息 connect() failed (111: Connection Beenrejected) 表示 Nginx 无法与上游建立连接后端服务。

以下是解决该问题的一些步骤:

验证后端服务:确保前端服务正在集群内运行且可访问。您可以通过检查前端 pod (kubectl get pods) 的状态并确保它们处于正在运行状态来完成此操作。 检查服务IP和端口:确认前端服务的IP地址和端口与Ingress资源(kubectl描述svc frontend)中指定的值匹配。确保该服务正在侦听端口 3000。 验证 Ingress 配置:仔细检查 Ingress 配置,确保其正确指定后端服务(前端)和端口 3000。注意路径和后端部分中的任何拼写错误或错误配置。 检查网络策略:如果您在集群中启用了网络策略,请确保没有策略阻止 Nginx 入口控制器和后端服务之间的流量。 检查 Nginx 入口日志:在 Nginx 入口控制器 pod 的日志 (kubectl 日志) 中查找任何错误或警告。这可以让您更深入地了解为什么与上游服务的连接被拒绝。 测试连接:尝试使用curl或telnet等工具从集群内手动连接到后端服务,以验证其是否可访问(curl http://frontend:3000)。如果无法访问,则服务本身或其网络配置可能存在问题。

© www.soinside.com 2019 - 2024. All rights reserved.