Kubernetes: на основе пути работает только с root

У меня есть кластер EKS, и в настоящее время я использую маршрутизацию на основе пути. Я ранее публиковал эту ветку, поэтому вся моя конфигурация там: Kubernetes: 502 (Плохое бегство)

Мой контроллер входящего трафика находится оттуда: https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/mandatory.yaml

Вот мой вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  namespace : default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: domain.com
    http:
      paths:
      - path: /bleble(/|$)(.*)
        backend:
          serviceName: bleble-svc
          servicePort: 8080
      - path: /hello-world
        backend:
          serviceName: hello-world-svc
          servicePort: 8080

Это работает абсолютно нормально, пока вы не попытаетесь пойти куда-нибудь, кроме domain.com/bleble или domain.com/hello-world. Службы должны ссылаться друг на друга, а запрашиваемый ими uri - это просто domain.com, что, очевидно, не работает, потому что служба находится по адресу domain.com/nameoftheservice.

Две проблемы:

  • Имя сервиса bleble, поэтому мы решили, что путь должен быть / bleble. Я видел в этой документации (kubernetes.github.io/ingress-nginx/examples/rewrite), что добавление (/|$)(.*) позволило бы перезаписать. Мы хотим использовать url как domain.com/bleble/swagger или domain.com/bleble/clients, ... Но когда мы их набираем, он возвращает к тому, что было на / bleble
  • Мне нужен bleble, чтобы получить информацию от hello-world. Прямо сейчас, вместо перехода с domain.com/bleble на domain.com/hello-world, он переходит с domain.com/bleble на domain.com. кажется, что он может вызывать только имя хоста, а не путь.

Я пробовал использовать один входящий ресурс и получил nginx.ingress.kubernetes.io/app-root : /bleble, но это не работает. Я тоже пробовал аннотацию nginx.ingress.kubernetes.io/rewrite-target: /coretest

Спасибо за помощь!


person shrimpy    schedule 06.06.2019    source источник
comment
Вы спрашиваете об услугах обслуживания вызовов? Или звонки извне вашего кластера. Можете ли вы привести пример пути, по которому вы будете звонить, чего вы ожидаете (какая служба должна обрабатывать запрос) и что на самом деле происходит?   -  person frankd    schedule 07.06.2019
comment
FWIW, /bleble(/|$)(.*) - очень странное регулярное выражение; $ всегда должен быть завершающим символом, но ваш говорит match / bleble, конец строки, а затем все, что идет после конца строки; возможно, вы имели в виду /bleble(?:/(.*))$, а затем изменили цель перезаписи на $1?   -  person mdaniel    schedule 07.06.2019
comment
Имя сервиса bleble, поэтому мы решили, что путь должен быть / bleble. Я видел в этой документации (kubernetes.github.io/ingress-nginx/examples/rewrite), что добавление (/|$)(.*) позволит перезаписать. Мы хотим иметь URL как domain.com/bleble/swagger или domain.com/bleble/clients, ... Но когда мы их набираем, он возвращает то, что было на / bleble   -  person shrimpy    schedule 07.06.2019
comment
@frankd Я действительно спрашиваю о моем первом сервисе, которому нужна информация от моего сервиса2. Прямо сейчас, вместо перехода с domain.com/bleble на domain.com/hello-world, он переходит с domain.com/bleble на domain.com. кажется, что он может вызывать только имя хоста, а не путь. Кроме того, он делает то, что я только что набрал в комментарии выше.   -  person shrimpy    schedule 07.06.2019
comment
@shrimpy какую версию контроллера входящего трафика nginx вы используете? kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version   -  person A_Suh    schedule 25.06.2019