配置Ingress公网访问Kibana出现502错误,如何修复?
Kibana Ingress 502错误排查与解决
问题背景
我按照Elastic官方指南部署了Kibana,通过端口转发可以正常访问,但配置了如下Ingress后,访问时出现502错误:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kibana-ui annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: "false" spec: ingressClassName: nginx rules: - http: paths: - path: /kibana pathType: Prefix backend: service: name: quickstart-kb-http port: number: 5601
核心问题分析
- 无效的
rewrite-target配置:你将rewrite-target设为"false",这是非法值,Nginx Ingress Controller无法解析该配置,直接导致转发规则异常。 - Kibana路径不匹配:Kibana默认监听根路径
/,当Ingress以/kibana前缀转发请求时,Kibana无法识别子路径下的请求,进而引发资源加载失败或转发错误。
解决方法
方案一:配置Ingress路径重写
修改Ingress配置,通过正则匹配实现路径重写,将/kibana/xxx转发为/xxx给Kibana:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kibana-ui annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - http: paths: - path: /kibana(/|$)(.*) pathType: Prefix backend: service: name: quickstart-kb-http port: number: 5601
应用配置:kubectl apply -f <ingress-file.yaml>
方案二:让Kibana适配子路径
修改Kibana的CR配置,指定其运行在/kibana子路径下,这样Ingress无需重写即可直接转发:
apiVersion: kibana.k8s.elastic.co/v1 kind: Kibana metadata: name: quickstart spec: version: 8.x.x # 替换为你的实际Kibana版本 count: 1 config: server.basePath: "/kibana" server.rewriteBasePath: true http: service: spec: type: ClusterIP podTemplate: spec: containers: - name: kibana resources: requests: memory: 1Gi cpu: 1
应用Kibana配置后,Ingress可以简化为:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kibana-ui annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: ingressClassName: nginx rules: - http: paths: - path: /kibana pathType: Prefix backend: service: name: quickstart-kb-http port: number: 5601
额外排查步骤
如果修改后仍出现502,检查以下内容:
- 确认Kibana服务端点状态:执行
kubectl get endpoints quickstart-kb-http,查看是否有Ready的Pod IP。 - 查看Ingress Controller日志:
kubectl logs -n <ingress-namespace> <nginx-ingress-pod-name>,根据日志定位具体错误(如连接超时、拒绝连接)。 - 检查Kibana Pod状态:
kubectl get pods -l kibana.k8s.elastic.co/name=quickstart,确认Pod正常运行,查看Pod日志排查内部错误。
内容的提问来源于stack exchange,提问作者himekami
相关产品推荐
相关产品推荐

