Подстановочный знак пути не работает при входе в kubernetes

#nginx #kubernetes #kubernetes-ingress

#nginx #kubernetes #kubernetes-вход

Вопрос:

Я установил Ingress и связал с ним свою службу (usign metallb).

 apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
     nginx.ingress.kubernetes.io/rewrite-target: /
spec:
   rules:
   - http:
       paths:
       - path: /api/tasks/*
         # pathType: Exact
         backend:
           serviceName: tasks-service
           servicePort: 5004
 

Дело в том, что я настроил префикс путей в развертывании по умолчанию следующим образом:

/api/задачи/

где /api/tasks/tasks показывает, что служба запущена, а /api/tasks/tasks_count общее число указано. Однако в моем кластере k8s я не могу перенаправить на разные пути внутри сервиса. В чем может быть проблема?

Комментарии:

1. Насколько я знаю, сопоставление путей выигрывает по длине совпадения, поэтому * подразумевается в конце каждого path: , и при прочих равных условиях почти наверняка, что вы действительно не хотите rewrite-target: / , или он будет буквально отправлен / на серверную службу, поскольку группа захвата не используется. Вы имели в виду, что вне кластера URI есть /api/tasks/tasks , но tasks-service должен получать только /tasks ? Если это так, вы бы хотели path: /api/tasks/(. ) , а затем rewrite-target: /$1

Ответ №1:

Поскольку это результат поиска в Google подстановочных знаков и префиксов, я отвечу на этот старый вопрос.

Функциональность, которую вы ищете, зависит от указания типа пути следующим образом pathType: Prefix

        paths:
       - path: /api/tasks
         pathType: Prefix
         backend:
           serviceName: tasks-service
           servicePort: 5004
 

Важно отметить, что путь не содержит подстановочных знаков. Фактически, облачные провайдеры, такие как AWS, будут выдавать ошибки, если вы используете их пользовательские средства балансировки нагрузки для входных ресурсов:

 prefix path shouldn't contain wildcards