在Azure Kubernetes上创建OpenSearch Ingress后外部IP无法访问
排查与修正方案
一、先确认基础组件状态
- 检查NGINX Ingress Controller部署状态:执行
kubectl get pods -n ingress-nginx(若你自定义了Ingress Controller的命名空间,请替换为对应名称),确认所有Pod处于Running状态。 - 验证Ingress的外部IP分配:执行
kubectl get ingress opensearch-ingress,查看ADDRESS字段是否有有效外部IP。若为空,说明Ingress Controller未成功绑定AKS负载均衡器,需检查Controller安装日志或AKS的负载均衡器权限配置。 - 检查后端服务的端点有效性:
- 执行
kubectl get endpoints my-dashboard-opensearch-dashboards,确认ENDPOINTS字段包含OpenSearch Dashboards Pod的IP与端口。 - 执行
kubectl get endpoints opensearch-cluster-master,确认ENDPOINTS字段包含OpenSearch主节点Pod的IP与端口。
- 执行
二、修正Ingress配置问题
你当前的Ingress正则规则与路径重写逻辑存在匹配冲突,建议调整为以下配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: opensearch-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - http: paths: # 根路径及非/opensearch开头的请求转发到Dashboards - path: /(?!opensearch)(.*) pathType: Prefix backend: service: name: my-dashboard-opensearch-dashboards port: number: 5601 # /opensearch开头的请求转发到OpenSearch集群,并重写路径去掉前缀 - path: /opensearch/(.*) pathType: Prefix backend: service: name: opensearch-cluster-master port: number: 9200 annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1
配置说明:
- 第一个路径使用负向预查
(?!opensearch),确保所有非/opensearch开头的请求都转发到OpenSearch Dashboards,避免路径匹配冲突。 - 第二个路径针对
/opensearch/开头的请求,通过rewrite-target去掉前缀,保证OpenSearch API能正确识别请求路径(例如/opensearch/_cat/indices会被重写为/_cat/indices转发到后端服务)。
三、日志定位深层问题
若调整配置后仍无法访问,查看Ingress Controller的日志获取具体错误信息:
# 替换为你的Ingress Controller所在命名空间和Pod名称 kubectl logs -n ingress-nginx <ingress-controller-pod-name>
重点关注日志中的4xx/5xx错误、连接超时或路径匹配失败的记录,这些信息能直接指向问题根源。
内容的提问来源于stack exchange,提问作者wholt
相关产品推荐
相关产品推荐

