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 图像在我重新部署时没有更新。
我有一个简单的 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 图像在我重新部署时没有更新。