Вход Kubernetes nginx не совпадает с под-путями - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сделать простой пример ingress-nginx в облаке Google, но он не совпадает с подпутями:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /one
          backend:
            serviceName: test-one-backend
            servicePort: 80
        - path: /two
          backend:
            serviceName: test-two-backend
            servicePort: 80

Когда я звоню, http://server/one работает, но когдаЯ звоню http://server/one/path Я получаю 404. Я пробовал несколько вещей, таких как использование регулярных выражений, но просто не работает

Бэкэнды - это просто эхо-серверы, которые отвечают всегда на любом пути.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Вам нужно использовать /* в конце пути:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /one/*
          backend:
            serviceName: test-one-backend
            servicePort: 80
        - path: /two
          backend:
            serviceName: test-two-backend
            servicePort: 80

На самом деле это не , широко документированное на сегодняшний день , но, по сути, path переводитв блок location {} в файле nginx.conf

0 голосов
/ 28 июня 2019

Внимание, это изменилось в версии 0.22.0 ingress-nginx.Пример оформления заказа на https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md Теперь вам нужно работать с захваченными группами, чтобы передать подпуть к цели перезаписи.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)
0 голосов
/ 19 октября 2018

Это определение соответствует точной строке для пути.Если вы хотите включить подкаталоги, вы можете использовать подстановочный знак *.Ваше модифицированное определение должно выглядеть следующим образом:

- path: /one/*
  backend:
    serviceName: test-one-backend
    servicePort: 80

Я не уверен, работает ли http://server/one (без косой черты в конце).В этом случае вы должны сохранить старое определение и добавить другое, как указано выше.

...