Перепишите только определенный маршрут с nginx Ingress

У меня есть три службы, работающие в моем бэкэнд, а маршрутизация Ingress определяется следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.westeurope.cloudapp.azure.com
    secretName: acme-crt-secret
  rules:
  - host: myapp.westeurope.cloudapp.azure.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-mvc
          servicePort: 80
      - path: /api
        backend:
          serviceName: myapp-api
          servicePort: 80
      - path: /identity
        backend:
          serviceName: myapp-identity
          servicePort: 80

Проблема в том, что myapp-api уже прослушивает запросы к /api/v1/myresource. В текущей конфигурации служба myapp-api обслуживает запросы только myapp.westeurope.cloudapp.azure.com/api/api/v1/myresource (обратите внимание на ... / api / api / ...).

Возможно ли обслуживать запросы /api службой myapp-api, но переписывать эти запросы на / для службы без создания другого Ingress? Итак, myapp-api должен обслуживать запросы myapp.westeurope.cloudapp.azure.com/api/v1/myresource.

0
задан 13 August 2018 в 13:42

1 ответ

У вас есть два варианта:

a) Измените порт API и выполните его / на этом порту.

b) Измените приложение, чтобы оно обслуживало API на "/ v1 / myresource" и присвойте ему часть api через URL-адрес через Ingress.

В любом случае у вас будут свои ресурсы на "myapp.westeurope.cloudapp.azure.com/ апи / v1 / myresource».

1
ответ дан 15 August 2018 в 17:04
  • 1
    Я знаю вариант b), но я бы хотел оставить сервис api без изменений. Не могли бы вы подробнее рассказать о том, как можно достичь подхода а)? Я не понимаю, как это сделать. – officer 13 August 2018 в 18:09

Другие вопросы по тегам:

Похожие вопросы: