Spring boot admin Kubernetes Ingress

问题描述 投票:0回答:2

我正在尝试向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 url kubernetes admin kubernetes-ingress
2个回答
0
投票

问题是您的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

0
投票

最后我找到了解决方法。

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é

© www.soinside.com 2019 - 2024. All rights reserved.