#python #flask #kubernetes #kubernetes-ingress
#python #flask #kubernetes #kubernetes-ingress
Вопрос:
У меня есть кластер Kubernetes, который использует Ingress для пересылки трафика во внешнее приложение React и серверное приложение Flask. Моя проблема в том, что приложение React работает только в том случае, если аннотация rewrite-target не установлена, а приложение flask работает только в том случае, если оно установлено.
Как я могу получить доступ к своему приложению flask без установки этого значения (прокомментировано ниже yaml).
Вот контроллер входа:
metadata:
name: thesis-ingress
namespace: thesis
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/add-base-url: "true"
# nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
tls:
- hosts:
- thesis
secretName: ingress-tls
rules:
- host: thesis.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 3000
- path: /backend
pathType: Prefix
backend:
service:
name: backend
port:
number: 5000
Ответ №1:
В вашем вопросе не указано, но я предполагаю, что ваша группа захвата должна была переписать /backend/(. )
/$1
; исходя из этого предположения:
Имейте в виду, что аннотации относятся к каждому входу, но все входные ресурсы объединены в кластере, чтобы охватить всю конфигурацию. Таким образом, если вам нужна одна перезапись и одна без, просто создайте два входных ресурса
metadata:
name: thesis-frontend
namespace: thesis
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
tls:
- hosts:
- thesis
secretName: ingress-tls
rules:
- host: thesis.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 3000
---
metadata:
name: thesis-backend
namespace: thesis
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
tls:
- hosts:
- thesis
secretName: ingress-tls
rules:
- host: thesis.info
- path: /backend/(. )
backend:
service:
name: backend
port:
number: 5000
Комментарии:
1. Хорошо, вы правы! Это именно то, что мне было нужно. Я думал, не понимал, что два входа могут работать на одном входе!
2. Я рад, что это сработало для вас, и что это было что-то простое. Пожалуйста, примите ответ, чтобы другие знали, что вам больше не нужна помощь в этом вопросе