Вопрос или проблема
Я использую Ingress (с Traefik), чтобы настроить мой scorpio бэкенд с:
- backend:
service:
name: scorpio
port:
number: 9090
path: /ngsi-ld
pathType: Prefix
и я успешно получаю доступ к нему по адресу http://myservice.com/ngsi-ld/v1/entities?type=data.
Я хочу заменить /ngsi-ld на /api в URL пути: т.е.
http://myservice.com/api/v1/entities?type=data, но я не знаю, как построить Ingress.
Я также пробовал безуспешно использовать аннотацию rewrite-target и pathType ImplementationSpecific.
Пожалуйста, не могли бы вы помочь мне?
Ответ или решение
Для замены пути в Ingress с использованием Traefik вам нужно использовать аннотацию rewrite-target
, чтобы перенаправить запросы с /api
на /ngsi-ld
. Приведу пример конфигурации Ingress, который решает вашу задачу:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: scorpio-ingress
annotations:
traefik.ingress.kubernetes.io/router.rule: "PathPrefix(`/api`)"
traefik.ingress.kubernetes.io/rewrite-target: /ngsi-ld$1
spec:
rules:
- host: myservice.com
http:
paths:
- path: /api(/|$)(.*)
pathType: Prefix
backend:
service:
name: scorpio
port:
number: 9090
Пояснение конфигурации:
-
Аннотации:
traefik.ingress.kubernetes.io/router.rule
: Используется для указания правила маршрутизации. В данном случае мы используемPathPrefix(
/api)
, что позволяет перехватывать все запросы, начинающиеся с/api
.traefik.ingress.kubernetes.io/rewrite-target
: Указывает, что все запросы к пути/api
должны быть переписаны на/ngsi-ld
. Символ$1
позволяет сохранить оставшуюся часть строки после/api
.
-
Правило маршрутизации:
- Внутри
spec
вы указываетеrules
, где определяете хост и соответствующие пути. Мы используемpath: /api(/|$)(.*)
, чтобы учесть как случаи, когда после/api
следует слэш, так и те, где он отсутствует. pathType: Prefix
обеспечивает, что все подпути будут также соответствовать нашему маршруту.
- Внутри
Проверка работы:
После создания или обновления данного Ingress вы сможете получить доступ к вашему сервису по новому URL:
http://myservice.com/api/v1/entities?type=data
Эта конфигурация должен корректно обработать ваш запрос и перенаправить его на соответствующий сервис scorpio
, который работает на порту 9090
.
Заключение:
Не забудьте протестировать новое правило и убедиться, что ваши аннотации правильно распознаются Traefik. Если у вас возникнут проблемы, вы можете просмотреть логи Traefik для дополнительного анализа.