Spring 引导管理员 Kubernetes Ingress

Spring boot admin Kubernetes Ingress

我正在尝试向部署在 kubernetes 集群中的某些微服务添加 spring 启动管理界面。 spring 引导管理应用程序具有以下配置:

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: /
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 引导管理 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 引导管理界面无法知道您正在使用“/admin”子url。

nginx.ingress.kubernetes.io/rewrite-target: / 要求 nginx 重写你的 url 匹配第二组。 因此,当您点击时: https://XXXXX/admin/ui nginx 将您的 url 重写为 https://XXXXXX/ui,然后将其发送至 spring boot.

我不太了解 spring 引导,但你应该有办法为他提供一个子url 所以不是服务于 /ui 它服务于 /$BASE_URL/ui.

然后天气它是如何工作的,你可能需要改变 nginx 重写 url 的方式,比如:

  • path: ^(/admin/)(.+)\
  • nginx.ingress.kubernetes.io/rewrite-target: /

我终于找到了解决办法。

Spring 引导管理员有一个名为 "public URL"

的工具
      spring:
        application:
          name: administrator-interface
        boot:
          admin:
            context-path: "/ui"
            ui:
              public-url: "https://XXX/admin/ui"
      server:
        use-forward-headers: true

这样的配置我告诉 spring 引导管理员我想连接上下文 /ui 但是当尝试加载资源时它应该向 /admin/ui 发出请求。

现在我可以连接到通过 https:/XXX/ui 的接口,并且正在发送请求以从 https://XXX/admin/ui 加载资源,添加由 ingress

设置的前缀

谢谢@Noé