#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