Замените путь в Ingress k8s на traefik

Вопрос или проблема

Я использую 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

Пояснение конфигурации:

  1. Аннотации:

    • traefik.ingress.kubernetes.io/router.rule: Используется для указания правила маршрутизации. В данном случае мы используем PathPrefix(/api), что позволяет перехватывать все запросы, начинающиеся с /api.
    • traefik.ingress.kubernetes.io/rewrite-target: Указывает, что все запросы к пути /api должны быть переписаны на /ngsi-ld. Символ $1 позволяет сохранить оставшуюся часть строки после /api.
  2. Правило маршрутизации:

    • Внутри spec вы указываете rules, где определяете хост и соответствующие пути. Мы используем path: /api(/|$)(.*), чтобы учесть как случаи, когда после /api следует слэш, так и те, где он отсутствует.
    • pathType: Prefix обеспечивает, что все подпути будут также соответствовать нашему маршруту.

Проверка работы:

После создания или обновления данного Ingress вы сможете получить доступ к вашему сервису по новому URL:

http://myservice.com/api/v1/entities?type=data

Эта конфигурация должен корректно обработать ваш запрос и перенаправить его на соответствующий сервис scorpio, который работает на порту 9090.

Заключение:

Не забудьте протестировать новое правило и убедиться, что ваши аннотации правильно распознаются Traefik. Если у вас возникнут проблемы, вы можете просмотреть логи Traefik для дополнительного анализа.

Оцените материал
Добавить комментарий

Капча загружается...