【问题标题】:Handle server context in a Thymeleaf application running in a Kubernetes cluster在 Kubernetes 集群中运行的 Thymeleaf 应用程序中处理服务器上下文
【发布时间】:2020-05-05 00:27:10
【问题描述】:

我在前端有一个带有 Thymeleaf 的 Spring Boot 应用程序。我需要将应用程序部署到 Kubernetes 集群,在该集群中可以通过类似 my-k8s-cluster.com/my-application 的路径访问它。

上下文路径/my-application 是在 Kubernetes 端配置的,不是应用程序需要了解的主题。无需更改应用代码即可独立更改。

问题:与我是否使用context-relative URLs or server-relative URLs无关 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

【问题讨论】:

  • 你在使用 ingress 吗?请发布规范文件。
  • @KoopaKiller 请检查更新后的问题。
  • 您能否通过指定您的运行方式来分享您的代码库?
  • 谢谢@Davislor。是的,这个问题被标记为离题,这就是我删除它的原因。正如你所说,这个问题与未设置时区有关(因为它在 Docker 内部)。我通过在运行脚本之前设置 DEBIAN_FRONTEND=noninteractive env 变量解决了这个问题
  • @SashaShpota 我很欣赏这个想法,但serial voting 可能会给你带来麻烦。在规则范围内做你想做的事情的公认方式是奖励赏金。 :)

标签: java spring spring-boot thymeleaf


【解决方案1】:

如果我正确理解您的问题,下一个解决方案可能对您有用。

根据Spring Boot documentationcontext-path可以通过属性文件进行更改。

默认情况下context-path\,但使用应用程序属性文件中的下一个设置server.servlet.context-path 可以更改它。

例如,为了使用/my-application 作为上下文路径,应将下一个属性server.servlet.context-path=/my-application 添加到application.properties

Spring Boot docs 中还有几种更改此属性的方法:

例如,可以通过OS environment variablescommand-line arguments等方式完成。

因此,可以通过在 Kubernetes 中为容器定义环境变量来设置此属性。更多信息可以找到here

此外,Spring Cloud 支持从 Kubernetes ConfigMap 读取属性。 Spring Cloud Kubernetes描述这个案例

【讨论】:

    【解决方案2】:

    你可以试试这个

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2015-09-11
      • 2019-02-17
      • 2011-06-23
      • 2019-04-18
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多