OpenSearch集群无法通过Nginx Ingress访问,请求协助排查
排查OpenSearch集群Nginx Ingress无法工作的问题
核心问题梳理
你的OpenSearch集群通过端口转发可正常访问,但部署Nginx Ingress后无法通过Ingress访问,结合提供的信息,从以下几个方向排查:
1. Ingress资源与目标Service的命名空间/名称不匹配
注意到你提供的Ingress定义中:
- 名称为
osc-nginx-ingress,命名空间为osc
但kubectl get ingress和kubectl describe ingress显示的Ingress是os-nginx-ingress,命名空间为os
这说明你可能创建了错误的Ingress资源,或者执行kubectl apply时指定了错误的命名空间。执行以下命令确认:
# 检查osc命名空间下的Ingress和Service kubectl get ingress -n osc kubectl get service opensearch-cluster-master -n osc
如果osc-nginx-ingress存在且指向正确的Service,那你之前查看的是另一个错误的Ingress资源,后续操作请以osc命名空间下的Ingress为准。
2. Ingress未正确处理后端的HTTPS协议
你的端口转发命令使用https://<host_ip>:9200,说明OpenSearch的9200端口是HTTPS协议,但当前Ingress配置中没有指定后端协议,Nginx会默认用HTTP去连接后端的HTTPS端口,导致握手失败。
修改Ingress资源,添加以下注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: osc-nginx-ingress namespace: osc annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/proxy-connect-timeout: "75s" nginx.ingress.kubernetes.io/proxy-read-timeout: "300s" nginx.ingress.kubernetes.io/proxy-send-timeout: "300s" # 添加以下HTTPS相关注解 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/proxy-ssl-verify: "off" # 忽略OpenSearch自签证书验证 spec: ingressClassName: nginx rules: - http: paths: - path: / pathType: Prefix backend: service: name: opensearch-cluster-master port: number: 9200
然后重新应用Ingress:
kubectl apply -f ingress.yaml -n osc
3. Ingress Address为空,未分配访问入口
Ingress的Address字段为空,说明Ingress Controller未成功为其分配访问地址:
- 如果是NodePort模式:查看Ingress Controller的Service端口
用kubectl get service -n <ingress-controller-namespace> # 通常是ingress-nginxhttp://<node-ip>:<node-port>测试访问,确认端口是否可通。 - 如果是LoadBalancer模式:检查云提供商的负载均衡器是否已创建完成,Ingress的
Address会同步负载均衡器的IP。
4. 检查Ingress Controller日志
查看Ingress Controller的日志,获取具体错误信息:
kubectl logs nginx-ingress-controller-sjtw6 -n <ingress-controller-namespace>
重点关注是否有SSL握手错误、后端连接超时等日志,这些会直接指向问题原因。
5. 测试Ingress Controller到后端Pod的连通性
进入Ingress Controller Pod内部,直接访问OpenSearch Pod的IP,确认网络连通性:
kubectl exec -it nginx-ingress-controller-sjtw6 -n <ingress-controller-namespace> -- /bin/sh # 在Pod内执行curl测试 curl -s -XGET https://10.24.1.106:9200/ -u admin:admin --insecure
如果测试失败,说明集群内部网络存在问题;如果成功,说明Ingress的配置仍有疏漏。
内容的提问来源于stack exchange,提问作者svw1105
相关产品推荐
相关产品推荐

