Menangani konteks server dalam aplikasi Thymeleaf yang berjalan di cluster Kubernetes

Saya memiliki aplikasi Spring Boot dengan Thymeleaf di sisi depan. Saya perlu menerapkan aplikasi ke cluster Kubernetes yang dapat diakses melalui jalur seperti ini my-k8s-cluster.com/my-application.

Jalur konteks /my-application dikonfigurasi di sisi Kubernetes dan bukan merupakan subjek yang perlu diketahui oleh aplikasi. Dapat diubah secara mandiri tanpa mengubah kode aplikasi.

Masalah: Terlepas dari apakah saya menggunakan URL atau server yang relatif kontekstual -URL relatif Thymeleaf mengacu pada root server. Saat aplikasi berjalan di my-k8s-cluster.com/my-application Thymeleaf mencari sumber dayanya di my-k8s-cluster.com/ dan gagal memuatnya.

Pertanyaan: Bagaimana cara mengonfigurasi Thymeleaf agar berjalan secara independen dengan akar konteks yang berbeda?

Pembaruan: Berikut tampilan konfigurasi Ingress saya:

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 sumber
comment
Apakah Anda menggunakan masuknya? Silakan posting file spesifikasi.   -  person Mr.KoopaKiller    schedule 24.04.2020
comment
@KoopaKiller silakan periksa pertanyaan yang diperbarui.   -  person Sasha Shpota    schedule 24.04.2020
comment
dapatkah Anda membagikan basis kode Anda dengan menentukan bagaimana Anda menjalankannya?   -  person Anish B.    schedule 28.04.2020
comment
Maaf membalas seperti ini, tetapi Anda menghapus pertanyaan TeX terbaru Anda karena di luar topik. Saya harap itu berarti Anda menyelesaikannya. Jika tidak: instalasi salah satu dependensi, karena alasan tertentu, mencoba mengatur zona waktu Anda. Anda dapat menjalankan dpkg-reconfigure tzdata terlebih dahulu untuk memastikannya disetel. Saya tidak mendapatkan bug itu ketika saya menginstal dengan apt install texlive-full.   -  person Davislor    schedule 11.05.2020
comment
Terima kasih @Davislor. Ya, pertanyaan itu ditandai sebagai di luar topik, itulah sebabnya saya menghapusnya. Seperti yang Anda katakan, masalahnya terkait dengan zona waktu yang tidak disetel (karena berada di dalam Docker). Saya memecahkan masalah ini dengan mengatur variabel DEBIAN_FRONTEND=noninteractive env sebelum menjalankan skrip   -  person Sasha Shpota    schedule 11.05.2020
comment
@Davislor terima kasih atas waktunya sekali lagi. Saya jelas tidak dapat memilih jawaban untuk pertanyaan yang tidak ada, itu sebabnya saya memilih beberapa jawaban Anda di sini :) Semoga harimu menyenangkan!   -  person Sasha Shpota    schedule 11.05.2020
comment
@SashaShpota Saya menghargai pemikiran itu, tetapi pemungutan suara serial mungkin membuat Anda mendapat masalah. Cara yang diterima untuk melakukan apa yang Anda inginkan sesuai aturan adalah dengan memberikan hadiah. :)   -  person Davislor    schedule 11.05.2020


Jawaban (2)


Jika saya memahami masalah Anda dengan benar, solusi selanjutnya mungkin berguna dalam kasus Anda.

Menurut dokumentasi Spring Boot, context-path dapat diubah melalui file properti.

Secara default context-path adalah \, tetapi menggunakan pengaturan berikutnya server.servlet.context-path dalam file dengan properti aplikasi, ini dapat diubah.

Misalnya, untuk menggunakan /my-application sebagai jalur konteks, properti berikutnya server.servlet.context-path=/my-application harus ditambahkan ke application.properties.

Juga di dokumen Spring Boot ada beberapa pendekatan untuk mengubah properti ini:

Sebagai contoh, dapat dilakukan melalui OS environment variables atau command-line arguments dan lain-lain.

Oleh karena itu, properti ini dapat dikonfigurasi dengan mendefinisikan variabel lingkungan untuk sebuah container di Kubernetes. Informasi selengkapnya dapat ditemukan di sini

Selain itu, Spring Cloud mendukung pembacaan properti dari Kubernetes ConfigMap. Musim semi Cloud Kubernetes menjelaskan kasus ini

person Danil Kuznetsov    schedule 29.04.2020

bisakah kamu mencoba ini

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