Как получить доступ к приложению flask через ingress без настройки перезаписи-цели

#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. Я рад, что это сработало для вас, и что это было что-то простое. Пожалуйста, примите ответ, чтобы другие знали, что вам больше не нужна помощь в этом вопросе