Kibana 7.17.3设置server.basePath后经Nginx Ingress访问报404
解决Kibana通过Nginx Ingress访问404的问题
问题分析
你设置了server.basePath: "/kibana"和server.rewriteBasePath: true,但Nginx Ingress默认会去掉匹配的/kibana前缀后转发请求到Kibana后端,导致Kibana收到的请求路径缺少/kibana前缀,无法匹配对应路由,从而返回404。
解决方案
1. 调整Ingress配置,保留路径前缀转发
修改kibana-ingress-ssl.yaml,添加路径重写注解并调整path规则:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kibana-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - admin' # 添加路径重写注解,保留/kibana前缀转发给后端 nginx.ingress.kubernetes.io/rewrite-target: /kibana/$2 spec: tls: - hosts: - example.com rules: - host: example.com http: paths: - backend: service: name: kibana-kibana port: number: 80 path: /kibana(/|$)(.*) pathType: Prefix
该配置会让Nginx将example.com/kibana转发到kibana-kibana:80/kibana/,example.com/kibana/dashboard转发到kibana-kibana:80/kibana/dashboard,配合Kibana的rewriteBasePath: true,Kibana会自动去掉/kibana前缀处理内部路由。
2. 验证Kibana配置是否生效
进入Kibana Pod查看实际生效的配置:
kubectl exec -it <kibana-pod-name> -- cat /usr/share/kibana/config/kibana.yml
确认server.basePath: "/kibana"和server.rewriteBasePath: true已正确配置。
3. 确认Service端口映射正确
检查Kibana Service的端口是否正确映射到Pod的5601端口:
kubectl get svc kibana-kibana -o yaml
确保spec.ports中的targetPort为5601(Kibana默认监听端口),port与Ingress配置的80一致。
验证
应用修改后的Ingress配置:
kubectl apply -f kibana-ingress-ssl.yaml
等待Ingress规则生效后,访问https://example.com/kibana即可正常打开Kibana UI。
内容的提问来源于stack exchange,提问作者Chanikya_Sai
相关产品推荐
相关产品推荐

