Kubernetes Ingress通用规则覆盖Kibana路径导致跳转异常如何解决
Kibana Ingress路径前缀丢失问题解决方案
问题的核心原因有两个:
- Kibana默认运行在根路径
/下,生成的跳转链接、资源路径不会自动携带/kibana前缀,导致跳转后的/login请求命中通用根路径规则 - 之前的rewrite规则配置逻辑和Kibana的路径处理逻辑不匹配
推荐方案:修改Kibana基础路径配置(稳定无隐患)
步骤1:调整Kibana运行参数
在Kibana的Deployment配置中新增以下环境变量,告知Kibana它的对外访问前缀是/kibana:
env: - name: SERVER_BASEPATH value: "/kibana" - name: SERVER_REWRITEBASEPATH value: "true"
配置生效后,Kibana自动生成的所有跳转链接、静态资源路径都会自动带上/kibana前缀,比如之前的/login?next=%2F会变成/kibana/login?next=%2Fkibana%2F,自然会匹配kibana专属的Ingress规则,不会被通用根路径规则捕获。
步骤2:修正Kibana的Ingress配置
将Kibana Ingress的rewrite注解调整为如下内容:
annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: /$2
这个配置会把匹配到的/kibana/xxx路径中的xxx部分(也就是正则捕获的$2)转发给Kibana服务的根路径,匹配Kibana的路径处理逻辑。
临时兼容方案:无需修改Kibana配置,仅调整Ingress规则
如果你暂时无法修改Kibana的运行配置,可以通过Ingress的proxy-redirect注解自动修改Kibana返回的跳转头,补全路径前缀:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kibana namespace: default annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/proxy-redirect-from: "/" nginx.ingress.kubernetes.io/proxy-redirect-to: "/kibana/" spec: tls: - hosts: - web10 secretName: k8s-ingress-tls rules: - http: paths: - path: /kibana(/|$)(.*) pathType: Prefix backend: service: name: kibana port: number: 5601
这个配置会自动把Kibana返回的Location响应头中/开头的路径替换为/kibana/,实现跳转路径自动补全前缀,但可能存在静态资源加载异常的隐患,仅推荐临时使用。
配置生效后可以执行kubectl describe ingress kibana确认规则正常加载,之后访问/kibana路径就不会被通用根路径规则捕获。
内容的提问来源于stack exchange,提问作者lovrodoe
相关产品推荐
相关产品推荐

