繁体   English   中英

从 Kubernetes NGINX 入口 controller 暴露服务总是返回 502 Bad Gateway

[英]Exposing service from Kubernetes NGINX Ingress controller always return 502 Bad Gateway

我对在数字海洋中的 kubernetes 集群中运行的 NodeJS 应用程序的请求存在问题。 每个请求都会返回502 Bad Gateway Error 我不确定我错过了什么。

这就是服务配置的样子

apiVersion: v1
kind: Service
metadata:
  name:  service-api
  namespace: default
  labels:
    app:  service-api
spec:
  type: ClusterIP
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 3000
  selector:
    app:  service-api

Ingress.yml 看起来像这样

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-api-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/limit-connections: '2'
    nginx.ingress.kubernetes.io/limit-rpm: '60'
    service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-algorithm: "round_robin"
    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"
spec:
  tls:
  - hosts:
    - dev-api.service.com
    secretName: service-api-tls
  rules:
  - host: "dev-api.service.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service-api
            port:
              number: 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"

会不会是配置SSL passthru的注解?

如果 SSL passthru 已在您的入口 controller 上配置,那么您的服务除了端口 80 之外还需要公开端口 443。您基本上是在说 Pod 正在终止安全连接而不是 ZEE434023CF89D7DFDB74

如果这是问题将解释 50X 错误,这表明后端有问题

正如我们(与@Emmanuel Amodu)在评论中讨论的那样:

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

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

  1. 检查 netstat -plant output 表
  2. 检查您的 Nginx 配置: $ kubectl exec -it -n <namespace-of-ingress-controller> <nginx-ingress-controller-pod> -- cat /etc/nginx/nginx.conf
  3. 检查服务: $ kubectl describe svc service-api

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM