Kubernetes Ingress报no Route matched with those values故障求助
报错no Route matched with those values本质是Ingress Controller没有加载到对应你访问域名、路径的路由规则,可按以下顺序排查解决:
1. 优先检查IngressClass绑定配置
你的Ingress配置未显式指定ingressClassName字段,这是问题高发点:
- 执行命令查看集群现有IngressClass:
kubectl get ingressclass - 确认你使用的Ingress Controller对应的IngressClass名称(k3s默认自带的Traefik对应名称一般为
traefik,如果是自行安装的Kong/APISIX等可对应查找) - 在
ingress.yaml的spec层级下添加对应配置,示例:spec: ingressClassName: traefik # 替换为你查到的实际IngressClass名称 rules: - host: kubernetes-app.local - 重新apply Ingress配置:
kubectl apply -f ingress.yaml -n my-app-plus,等待1分钟后测试访问
之前可正常访问后突然失效,大概率是集群默认IngressClass的标记被移除/修改,导致未指定className的Ingress不再被目标Ingress Controller处理。
2. 检查Ingress资源同步状态
执行命令查看Ingress的事件日志,确认配置是否被正常同步:
kubectl describe ingress kubernetes-app-ingress -n my-app-plus
检查输出底部Events字段,如有同步报错(如service不存在、权限不足、admission校验失败等)可对应处理。
3. 排查同主机名的Ingress冲突
执行命令查找全集群是否有其他Ingress占用了相同的主机名:
kubectl get ingress -A | grep kubernetes-app.local
如果存在其他命名空间下相同主机名的Ingress,会出现路由覆盖的情况,删除冲突Ingress或修改主机名即可解决。
4. 确认Service与Pod关联正常
你使用的是Headless Service,执行命令确认端点正常:
kubectl get endpoints kubernetes-app-service -n my-app-plus
如果ENDPOINTS列为空,说明Service的标签选择器未匹配到正常运行的Pod,可进一步执行kubectl get pods -n my-app-plus -l app=kubernetes-app-pod确认Pod状态为Running,标签与Service selector一致。
5. 查看Ingress Controller日志
查看Ingress Controller的Pod运行日志,搜索域名kubernetes-app.local确认是否有路由加载报错:
# 以默认k3s Traefik为例,替换为你实际的Ingress Controller Pod名称 kubectl logs -n kube-system traefik-xxxxxxx-xxxxx
如发现强制HTTPS跳转、路径重写类全局配置冲突,对应调整即可。
内容的提问来源于stack exchange,提问作者Sachin Ghumbre

