首页 > 解决方案 > Spring Boot 管理员 Kubernetes Ingress

问题描述

我正在尝试向部署在 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-booturlkubernetesadminkubernetes-ingress

解决方案


问题是您的 Spring Boot 管理界面无法知道您正在使用“/admin”子网址。

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

我不太了解spring boot,但你应该有办法为他提供一个suburl,而不是为/ui它提供服务/$BASE_URL/ui

然后天气它是如何工作的,您可能需要通过以下方式更改 nginx 重写 url 的方式:

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

推荐阅读