我正在尝试向kubernetes集群中部署的某些微服务添加spring boot管理界面。 Spring Boot管理应用程序具有以下配置:
spring:
application:
name: administrator-interface
boot:
admin:
context-path: "/ui"
server:
use-forward-headers: true
kubernetes集群具有一个可用作api网关的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
annotations:
{{- range $key, $value := .Values.ingress.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
{{- range $host := .Values.ingress.hosts }}
- host: {{ $host }}
http:
paths:
- path: /admin/(.+)
backend:
serviceName: administrator-interface-back
servicePort: 8080
{{- end -}}
{{- if .Values.ingress.tls }}
tls:
{{ toYaml .Values.ingress.tls | indent 4 }}
{{- end -}}
{{- end -}}
当我尝试查看spring boot admin ui时,出现以下错误:
资源管理器中的URL:https://XXXXXX(thisisgivenBYDNS)/admin/ui
GET https://XXXXXX/ui/assets/css/chunk-common.6aba055e.css net::ERR_ABORTED 404
URL错误,因为它应该是https://XXXXXX/admin/ui/assets/css/chunk-common.6aba055e.css
它没有添加ingess给出的/ admin路径
我该如何解决这个问题,并配置一条附加路径以提供来自正确URL的请求中的静态内容?
提前感谢
问题是您的Spring Boot管理界面无法知道您使用的是/ admin子URL。
nginx.ingress.kubernetes.io/rewrite-target: /$1
要求nginx重写与第二组匹配的URL。因此,当您点击时:https://XXXXX/admin/ui
nginx将您的URL重写为https://XXXXXX/ui
,然后将其发送到spring boot。
我不太了解Spring Boot,但您应该有一种方法可以为他提供一个子URL,而不是将其提供给/ui
并将其服务器提供给/$BASE_URL/ui
。
然后天气如何运作,您可能需要通过以下方式更改nginx重写网址的方式:
path: ^(/admin/)(.+)\
nginx.ingress.kubernetes.io/rewrite-target: $1/$2
最后我找到了解决方法。
Spring Boot管理员有一个名为“公共URL”的工具
spring:
application:
name: administrator-interface
boot:
admin:
context-path: "/ui"
ui:
public-url: "https://XXX/admin/ui"
server:
use-forward-headers: true
通过这种配置,我告诉Spring Boot管理员我想与上下文/ ui连接,但是当尝试加载资源时,它应该向/ admin / ui发出请求。
现在我可以连接经过https:/// XXX / ui的接口,并正在发送请求以从https://XXX/admin/ui加载资源,并添加由入口设置的前缀
谢谢@Noé