Обработка контекста сервера в приложении Thymeleaf, работающем в кластере Kubernetes.

У меня есть приложение Spring Boot с Thymeleaf на передней стороне. Мне нужно развернуть приложение в кластере Kubernetes, где оно будет доступно по такому пути my-k8s-cluster.com/my-application.

Контекстный путь /my-application настраивается на стороне Kubernetes и не является предметом приложения, о котором нужно знать. Его можно изменить самостоятельно без изменения кода приложения.

Проблема: независимо от того, использую ли я контекстно-зависимые URL-адреса или сервер -относительные URL-адреса Thymeleaf ссылается на корень сервера. Пока приложение работает на my-k8s-cluster.com/my-application, Thymeleaf ищет свои ресурсы в my-k8s-cluster.com/ и не может их загрузить.

Вопрос: Как настроить Thymeleaf для независимой работы с разными корнями контекста?

Обновление: вот как выглядит моя конфигурация Ingress:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: my-k8s-cluster.com
      http:
        paths:
          - path: /my-application/?(.*)
            backend:
              serviceName: my-service
              servicePort: 80

person Sasha Shpota    schedule 24.04.2020    source источник
comment
Вы используете вход? Пожалуйста, выложите файл спецификации.   -  person Mr.KoopaKiller    schedule 24.04.2020
comment
@KoopaKiller, пожалуйста, проверьте обновленный вопрос.   -  person Sasha Shpota    schedule 24.04.2020
comment
Вы можете поделиться своей кодовой базой, указав, как вы работаете?   -  person Anish B.    schedule 28.04.2020
comment
Извините, что отвечаю таким образом, но вы удалили свой недавний вопрос TeX как не по теме. Я надеюсь, это означает, что вы решили это. Если нет: установка одной из зависимостей по какой-то причине пыталась установить ваш часовой пояс. Вы можете сначала запустить dpkg-reconfigure tzdata, чтобы убедиться, что он установлен. Я не получаю эту ошибку, когда я вхожу с apt install texlive-full.   -  person Davislor    schedule 11.05.2020
comment
Спасибо @Davislor. Да, вопрос был помечен как не по теме, поэтому я его удалил. Как вы сказали, проблема связана с тем, что часовой пояс не установлен (потому что он был внутри Docker). Я решил проблему, установив переменную env DEBIAN_FRONTEND=noninteractive перед запуском скрипта.   -  person Sasha Shpota    schedule 11.05.2020
comment
@Davislor еще раз спасибо, что уделили время. Очевидно, я не могу проголосовать за ответ на несуществующий вопрос, поэтому я проголосовал за пару ваших ответов здесь :) Хорошего дня!   -  person Sasha Shpota    schedule 11.05.2020
comment
@SashaShpota Я ценю эту мысль, но последовательное голосование может навлечь на вас неприятности. Принятый способ делать то, что вы хотите в рамках правил, — это присудить награду. :)   -  person Davislor    schedule 11.05.2020


Ответы (2)


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

Согласно документации Spring Boot, context-path можно изменить через файлы свойств.

По умолчанию context-path равно \, но с помощью следующей настройки server.servlet.context-path в файле со свойствами приложения его можно изменить.

Например, чтобы использовать /my-application в качестве контекстного пути, следующее свойство server.servlet.context-path=/my-application должно быть добавлено в application.properties.

Также в документах Spring Boot есть несколько подходов к изменению этого свойства:

Например, это можно сделать через OS environment variables или command-line arguments и т.д.

Таким образом, это свойство можно настроить, определив переменные среды для контейнера в Kubernetes. Дополнительную информацию можно найти здесь

Кроме того, Spring Cloud поддерживает чтение свойств из Kubernetes ConfigMap. Spring Cloud Kubernetes описать этот случай

person Danil Kuznetsov    schedule 29.04.2020

можешь попробовать это

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: my-k8s-cluster.com
      http:
        paths:
          - path: /my-application/(.+)
            backend:
              serviceName: my-service
              servicePort: 80
person Keaz    schedule 04.05.2020