簡體   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