пункт назначения маршрута виртуальной службы istio с контекстным путем

У меня есть конфигурация istio, в которой контейнер докеров запускает jasperreports на tomcat (jasperreports bitnami) . к самому приложению можно получить доступ через контекстный путь по адресу http: // IP: 8080 / jasperserver.

Я планирую использовать istio в своей конфигурации kubernetes, выставить службу с помощью HTTP-шлюза и виртуальной службы. Могу ли я добавить контекстный путь jasperserver в дополнение к целевому хосту и номеру порта в конфигурации виртуальной службы?

вот моя текущая конфигурация виртуального сервиса

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: jasper-virtual-services  
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway
  http:
  - match:
    - uri:
        exact: /report
    
    route:
    - destination:
        host: jasperserver.reporting.svc.cluster.local
        port:
          number: 80

person Yuyanto    schedule 15.12.2020    source источник


Ответы (1)


Вероятно, вы ищете перезаписи

Что-то вроде

  http:
  - match:
    - uri:
        exact: /report
    rewrite:
      uri: /jasperserver
person user140547    schedule 15.12.2020
comment
Привет, я пробовал это, но это приводит к слишком большому количеству перенаправлений - person Yuyanto; 15.12.2020
comment
@Yuyanto, возможно, контейнер выполняет какое-то перенаправление, но без подробностей, боюсь, я не могу сказать ничего более конкретного - person user140547; 15.12.2020
comment
Попробуйте добавить тот же uri, но в качестве префикса вместо точного. - person Chris; 15.12.2020
comment
@Yuyanto Я подозреваю, что с самим приложением что-то не так. Я попытался воспроизвести проблему, и она работает без перезаписи, проблема возникает после добавления перезаписи, поскольку jesperserver создает какой-то странный путь, /jasperserver/login.html;jsessionid=1537778E913161D7E84D98E200CA3842, но сама перезапись работает правильно. - person Jakub; 15.12.2020
comment
@ user140547 да .. если мы обращаемся к контейнеру напрямую, например localhost: 8080, он автоматически перенаправляется на localhost: 8080 / jasperserver - person Yuyanto; 16.12.2020
comment
@Jakub, вы используете тот же контейнер из hub.docker.com/r/bitnami/jasperreports используете ли вы тот же шлюз и виртуальную службу, которые я предоставляю? кстати, я запускаю это на GKE .. это имеет значение? - person Yuyanto; 16.12.2020
comment
@Yuyanto Я использовал диаграмму управления bitnami, чтобы проверить это, и я также использовал GKE. Я использовал ваш шлюз и виртуальную службу с http: - match: - uri: exact: /report rewrite: uri: /jasperserver и http: - match: - uri: exact: /report/ rewrite: uri: /jasperserver/, поскольку иногда проблема заключалась в отсутствии / в конце. if we access the container directly, like localhost:8080, it will automatically redirect to localhost:8080/jasperserver поэтому istio rewrite не работает. - person Jakub; 16.12.2020
comment
хорошо ... позвольте мне попробовать использовать диаграмму ... мне нужно добавить больше sidecar внутри модуля, поэтому я использую образ докера и создаю yaml развертывания с нуля ... обновлю результаты ... заранее спасибо @Jakub - person Yuyanto; 16.12.2020
comment
@Yuyanto Обратите внимание, что при перезаписи у меня была та же проблема, что и у вас, даже если вы используете диаграмму управления, ничего не изменится, так как она использует то же изображение. Единственное, что у меня сработало, это когда я использовал точный префикс uri без перезаписи, так что просто - match:- uri: prefix: /jasperserver. - person Jakub; 16.12.2020
comment
@Jakub Я на самом деле тестировал использование префикса, прежде чем менять его на точное, но не работал на моей стороне .. Я использую балансировщик нагрузки Google в качестве основного входа ... может ли это быть причиной ... позвольте мне попробовать использовать istio ingress, чтобы выяснить, по крайней мере, рабочий config - person Yuyanto; 16.12.2020
comment
@Jakub, вы правы ... он работает нормально без каких-либо проблем, если я использую конфигурацию istio по умолчанию. Моя ошибка заключалась в добавлении другого входа с балансировщиком нагрузки типа HTTP. Большое тебе спасибо - person Yuyanto; 18.12.2020
comment
@ChristophRaab, извините, я пропустил ваш комментарий .. и да, префикс действительно решил проблему .. спасибо всем .. - person Yuyanto; 18.12.2020