У меня есть простое приложение 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()
У меня также есть простой файл index.html в контейнере nginx, который обслуживается в порту80. Это делает ajax POST-запрос к "/ upload". Что, если вы посмотрите на входной контроллер, следует преобразовать его в запрос порта 5000 и убрать «загрузку». Приложение фляги подается на порт 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
И для полноты, служба Emoji-Backend:
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/" - это правильная конечная точка и порт для службы Emoji-Backend.