В чем разница между / и / * во входных спецификациях / rules / http / paths / path - PullRequest
0 голосов
/ 28 июня 2019

У меня есть следующий входной ресурс


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-demo-ing
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: test.my-docker-kubernetes-demo.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: my-demo-service
              servicePort: 3000

Мое приложение здесь не было доступа test.my-docker-kubernetes-demo.com Я получал too many redirects error

но когда я заменил по пути из path: /* to path: /, это сработало.

Но я не могу найти, как это решило проблему, любая помощь в понимании или объяснении этого была бы великолепна.

Ответы [ 3 ]

1 голос
/ 03 июля 2019

Значение / и /* зависит от вашей входной реализации , например, существуют различные способы выбора диапазона путей с использованием входных реализаций NGINX и GCE:

путь: /foo/.*

path: / *

Вы можете выбрать реализацию для использования, задав аннотацию kubernetes.io / ingress.class .

В вашем случае, если вы используете NGINX, /* не интерпретируется как шаблон глобуса, поэтому позволяет подключаться буквально к /*.Все остальное будет отправлено в бэкэнд по умолчанию .

0 голосов
/ 02 июля 2019

Вы должны проверить NGINX Ingress Controller - переписать .

Начиная с версии 0.22.0, входные определения с использованием аннотации nginx.ingress.kubernetes.io/rewrite-target не имеют обратной совместимости с предыдущими версиями. В версии 0.22.0 и выше любые подстроки в URI запроса, которые необходимо передать переписанному пути, должны быть явно определены в группе захвата

Захваченные группы сохраняются в пронумерованных заполнителях в хронологическом порядке в виде $1, $2 ... $n. Эти заполнители можно использовать в качестве параметров в аннотации rewrite-target.

Вы можете проверить версию следующим образом:

kubectl exec -it <nginx-ingress-controller-pod-name> -n ingress-nginx -- /nginx-ingress-controller --version

Я думаю, что ваш Вход должен выглядеть следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-demo-ing
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: test.my-docker-kubernetes-demo.com
      http:
        paths:
          - path: /(.*)
            backend:
              serviceName: my-demo-service
              servicePort: 3000
0 голосов
/ 28 июня 2019

Вы можете найти краткое объяснение spec.rules[].http.paths[].path в k8s.io / api / extensions / v1beta1 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...