Миникуб с перезаписью пути входа nginx - PullRequest
1 голос
/ 24 июня 2019

Я использую миникуб с входом nginx.

Я пытаюсь использовать переписывание URL как this

Вот мое определение доступа:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: config-reader-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  backend:
    serviceName: default-http-backend
    servicePort: 80
  rules:
  - host: microservices.info
    http:
      paths:
      - path: /reload(/|$)(.*)
        backend:
          serviceName: spring-cloud-reload
          servicePort: 8080
      - path: /upload(/|$)(.*)
        backend:
          serviceName: spring-cloud-upload
          servicePort: 8080

Следующие URL переписываются так:

  • /reload до /

  • /reload/xyx до /xyz

что нормально. Но

  • /reload/x/y переписывает в /x// вместо /x/y

также

  • /reload/x/y/ переписывает в /x/y// вместо /x/y/

версия мини-куба: v0.35.0

Как можно исправить регистр с несколькими путями?

UPDATE

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.21.0
  Build:      git-b65b85cd9
  Repository: https://github.com/aledbf/ingress-nginx
-------------------------------------------------------------------------------

1 Ответ

1 голос
/ 25 июня 2019

До nginx-ingress v0.22.0 была известная проблема с конечными слешами.

Чтобы определить, какая версия входного контроллера работает, выполните exe в модуле и запустите команду версии nginx-ingress-controller.

kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.24.1
  Build:      git-ce418168f
  Repository: https://github.com/kubernetes/ingress-nginx
-------------------------------------------------------------------------------

Переписать целевую аннотацию очень чувствительно для конечных слешей. Если его нет, запрос не будет переписан.

Таким образом, вы должны всегда указывать URL как /reload/x/y/

Другая проблема с дублирующими косыми чертами (исправлена ​​в v 0.22.0 и выше).

Для того, чтобы понять, что там происходит, вы можете выполнить в модуле ingress-controller, найти /etc/nginx/nginx.conf и найти

set $location_path  "/reload(/|${literal_dollar})(.*)";

или

rewrite "(?i)/reload(/|$)(.*)" /$2 break;

блоки

Чтобы исправить это, либо обновите версию ингресс-контроллера до последней, либо вы также можете использовать фрагмент конфигурации аннотация:

nginx.ingress.kubernetes.io/configuration-snippet: |
    rewrite (?i)/reload/x/y/ /x/y break;
...