K3s环境Ingress全路径路由失效,Traefik报404,求排查方法
K3s环境下Ingress访问Jenkins 404问题排查流程
针对Traefik返回404、Ingress配置不生效的问题,可以按以下步骤逐层排查请求流转链路:
1. 验证Ingress资源状态
- 查看Ingress基本信息,确认
ADDRESS字段已关联Traefik入口IP(通常是K3s节点IP或LoadBalancer地址):kubectl get ingress -n jenkins - 查看Ingress详细事件和规则,确认无配置错误或资源关联失败:
重点检查kubectl describe ingress jenkins -n jenkinsEvents段是否有报错,以及后端Service的关联是否正确。
2. 排查后端Service与Pod的连通性
- 确认Service存在且端口配置正确:
注意:默认Jenkins容器监听kubectl get svc jenkins -n jenkins8080端口,需确认Service的targetPort是否指向Pod的8080(而非直接用80端口,除非你修改了Jenkins容器的监听端口)。 - 检查Service关联的Endpoints是否有效(如果Endpoints为空,说明Service与Pod标签不匹配):
kubectl describe svc jenkins -n jenkins | grep Endpoints - 在集群内验证Service到Pod的连通性:
临时启动测试Pod,尝试访问Service:
若返回Jenkins页面内容,说明Service到Pod的链路正常;否则排查Pod状态或标签匹配问题。kubectl run -it --rm busybox --image=busybox:1.36 --namespace=default -- wget -O- http://jenkins.jenkins.svc.cluster.local:80
3. 检查Traefik的配置与日志
- 过滤Traefik日志中的404请求,确认请求的
Host和Path是否匹配Ingress规则:
重点关注请求的kubectl logs -n kube-system -l app=traefik --tail=100 | grep "404"Host是否为jenkins.homelab.internal,Path是否符合Prefix: /的匹配规则。 - 确认Traefik已正确识别Ingress资源(K3s默认将Ingress转换为Traefik的IngressRoute):
查看生成的IngressRoute规则是否与你的Ingress配置一致。kubectl get ingressroutes.traefik.containo.us -n jenkins - 验证Traefik到Service的连通性:
进入Traefik Pod,直接访问后端Service:
若无法访问,排查集群内DNS或网络策略问题。kubectl exec -n kube-system -it $(kubectl get pods -n kube-system -l app=traefik -o name | head -n1) -- wget -O- http://jenkins.jenkins.svc.cluster.local:80
4. 验证客户端请求配置
- 确认客户端机器的DNS解析正确:
确保返回的IP是Traefik的入口IP(K3s节点IP或LoadBalancer地址)。nslookup jenkins.homelab.internal - 检查客户端请求的
Host头是否正确:
查看输出中的curl -v http://jenkins.homelab.internalHost:字段,必须为jenkins.homelab.internal,否则Ingress规则不会匹配。
5. 检查Jenkins Pod状态
- 确认Pod处于正常运行状态:
kubectl get pods -n jenkins - 查看Jenkins日志,确认服务已正常启动并监听对应端口:
确认日志中存在类似kubectl logs $(kubectl get pods -n jenkins -o name | head -n1) -n jenkinsJenkins is fully up and running的信息,且监听端口与Service的targetPort一致。
内容的提问来源于stack exchange,提问作者ronssm
相关产品推荐
相关产品推荐

