Обработка контекста сервера в приложении Thymeleaf, работающем в кластере Kubernetes - PullRequest
1 голос
/ 24 апреля 2020

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

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

Проблема: Независимо от того, использую ли я контекстно-зависимые URL-адреса или относящиеся к серверу URL-адреса Thymeleaf обращается к серверу root. Пока приложение работает на 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

Ответы [ 2 ]

0 голосов
/ 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
0 голосов
/ 29 апреля 2020

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

Согласно Документация Spring Boot , context-path можно изменить с помощью файлов свойств.

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...