Minikube 上的入口控制器未正确路由 flask POST 请求

Ingress Controller on Minikube not routing correctly flask POST request

我有一个简单的 Flask 应用程序。当我通过端口转发连接到它以将 HTTP Post 请求直接发送到服务时,它工作正常。

from flask import Flask, request
import redis
from rq import Queue
from worker import job_worker

UPLOAD_FOLDER = './uploads/'

app = Flask(__name__)

r = redis.Redis()
q = Queue(connection = r)

@app.route('/', methods=['POST'])
def upload():
    scale = int(request.form['scale'])
    q.enqueue(job_worker, scale)
    return ""

if __name__ == "__main__":
    app.run()

我在 nginx 容器中也有一个简单的 index.html 文件,它在端口 80 提供服务。它向“/upload”发出 ajax POST 请求。如果您查看入口控制器,应该将其转换为端口 5000 请求并删除 "upload" Flask 应用程序在端口 5000

得到服务

这是入口控制器:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: emoji-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /upload
        backend:
          serviceName: emoji-backend
          servicePort: 5000
      - path: /
        backend:
          serviceName: emoji-frontend
          servicePort: 80

为了完整起见,表情符号后端服务:

apiVersion: v1
kind: Service
metadata:
  name: emoji-backend
  labels:
    app: emoji-backend
    tier: backend
spec:
  type: LoadBalancer
  ports:
  - port: 5000
  selector:
    app: emoji-backend
    tier: backend

我得到一个 502 错误的网关,除了入口日志确实这样说之外没有任何指示:

2019/09/29 21:41:04 [error] 2021#2021: *78651 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.64.1, server: _, 
request: "POST /upload HTTP/2.0", upstream: "http://172.17.0.4:5000/", host: "192.168.64.5", referrer: "https://192.168.64.5/"

"http://172.17.0.4:5000/" 是表情符号后端服务的正确端点和端口。

添加以下行修复它:

app.run(debug=True,host='0.0.0.0',port=5000)

但是,我花了一段时间才弄明白,因为起初我尝试它时,我的 docker 图像在我重新部署时没有更新。