部署AWS ELB与Nginx Controller后Ingress提示Scheduled for sync无法访问
Nginx Ingress访问故障排查方案
故障根因定位
- 路径匹配与重写规则冲突:你当前配置的路径为
/*,同时配置了nginx.ingress.kubernetes.io/rewrite-target: /注解,所有匹配到的请求都会被重写为根路径,导致Grafana的子路径静态资源、接口请求无法正确路由。若你使用的是networking.k8s.io/v1版本的Ingress资源,/*的写法也不符合路径类型匹配规范,无法正确拦截所有路径请求。 - 域名解析配置错误:Ingress资源中显示的地址
172.20.223.123为集群内网地址,你需要将dashboard.dev.xxxx.ai域名解析到AWS ELB的公网IP(私网访问则解析到ELB私网地址),未正确配置解析会直接导致访问失败。 - 后端服务可用性异常:当前Ingress关联的后端服务为
kube-prom-stack-dev-grafana:80,需确认该服务端口配置正确、对应Endpoint存在且正常运行,服务本身异常会导致流量转发失败。 - Ingress Class匹配异常:你使用注解
kubernetes.io/ingress.class: nginx指定Ingress控制器,若你的集群中Nginx Ingress Controller使用了自定义的IngressClass名称,未在Ingress的spec.ingressClassName字段正确指定,会导致配置未被正确加载。 - AWS ELB安全组限制:需确认AWS ELB的入站规则已放通你访问来源的80/443端口请求,安全组拦截会直接导致端口不通。
对应解决步骤
- 修正Ingress路由规则:
若不需要重写路径,删除nginx.ingress.kubernetes.io/rewrite-target: /注解,将路径修改为/,路径类型指定为Prefix;如果需要路径重写,按如下规则修改:annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 rules: - host: dashboard.dev.xxxx.ai http: paths: - path: /(.*) pathType: Prefix backend: service: name: kube-prom-stack-dev-grafana port: number: 80 - 验证域名解析:在访问端执行
ping dashboard.dev.xxxx.ai,确认返回的IP为你的AWS ELB对应IP,未配置解析可临时修改本地hosts文件验证。 - 检查后端服务状态:
执行以下命令确认服务和端点正常:
也可以直接在集群内curl服务地址验证可用性:kubectl get svc kube-prom-stack-dev-grafana -n monitoring kubectl get ep kube-prom-stack-dev-grafana -n monitoringcurl 10.0.1.189:3000 - 校验Ingress Class配置:执行
kubectl get ingressclass确认集群中存在名为nginx的IngressClass,若控制器使用其他名称,在Ingress的spec.ingressClassName字段指定对应名称即可。 - 检查AWS ELB安全组:登录AWS控制台确认ELB关联的安全组入站规则已放通对应端口的访问来源。
- 若以上步骤均无异常,可查看Nginx Ingress Controller的运行日志排查具体转发错误:
kubectl logs -n <nginx-controller-namespace> <nginx-controller-pod-name>
内容的提问来源于stack exchange,提问作者Akshay Awate
相关产品推荐
相关产品推荐

