EKS集群部署Nginx Ingress Controller后访问超时排查求助
问题排查与修复方案
核心问题定位
Ingress资源长期处于Scheduled for sync状态,说明Nginx Ingress Controller未完成Ingress规则的同步,导致Nginx配置中无对应路由规则,最终引发访问超时。以下是针对性排查与修复步骤:
1. 修正Ingress注解冲突
你的Ingress资源混用了两类注解:nginx.ingress.kubernetes.io/(Kubernetes官方维护的Nginx Ingress Controller字段)和nginx.org/(NGINX官方维护的Ingress Controller字段),两类注解不兼容,会直接阻断同步流程。
- 将所有
nginx.org/开头的注解替换为对应官方字段:
原注解:
替换为:nginx.org/proxy-connect-timeout: 30s nginx.org/proxy-read-timeout: 20snginx.ingress.kubernetes.io/proxy-connect-timeout: "30s" nginx.ingress.kubernetes.io/proxy-read-timeout: "20s" - 更新Ingress资源:
kubectl apply -f <你的Ingress配置文件>
2. 检查Ingress Controller同步日志
查看Controller Pod的同步相关日志,定位具体报错:
kubectl logs -n <Ingress Controller所在命名空间> <Controller Pod名称> | grep -i "sync\|error"
重点关注是否存在权限不足、资源读取失败等报错,比如RBAC权限缺失会导致Controller无法读取Ingress/Services资源。
3. 验证NLB健康检查配置
虽然安全组无限制,但健康检查失败会导致NLB拒绝转发流量:
- 确认NLB目标组的健康检查路径是否正确:Nginx Ingress Controller默认健康检查端点为
/healthz,而非/,修改Service注解:service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: /healthz - 在AWS控制台查看目标组健康状态,确保所有Ingress Controller Pod的健康检查返回200状态码。
4. 核对Service端口映射
确认NLB的HTTPS端口(443)正确转发到Ingress Controller Pod的HTTPS端口:
kubectl get svc <Ingress Controller Service名称> -n <对应命名空间> -o yaml
检查spec.ports配置,确保name: https的端口中,targetPort指向Controller Pod的443端口(若自定义端口需对应)。
5. 验证同步状态
修复后,检查Ingress资源状态与Nginx配置:
- 查看Ingress是否完成同步:
确认kubectl get ingress <你的Ingress名称> -o yamlstatus字段包含正确的address,且无Scheduled for sync提示。 - 查看Nginx配置是否生成对应路由:
若能找到对应kubectl exec -n <对应命名空间> <Controller Pod名称> -- cat /etc/nginx/nginx.conf | grep -A 10 -B 2 <你的域名>server块,说明同步成功,此时重新访问即可正常连接Grafana。
内容的提问来源于stack exchange,提问作者yaml_rookie
相关产品推荐
相关产品推荐

