Kubernetes环境下Traefik UI连接被拒绝问题排查求助
排查Traefik UI NodePort连接被拒绝的问题
我来帮你捋捋这个连接被拒绝的问题,这类问题通常是端口映射、服务关联、网络拦截这几类原因导致的,咱们一步步排查:
1. 确认NodePort映射的正确性
首先得确认你用的NodePort是不是真的生效了:
- 执行下面的命令查看Service的详细信息:
检查输出里的kubectl -n kube-system get service traefik-web-uiPORT(S)列,确认NodePort确实是31107——有时候编辑Service后可能因为配置错误没生效,或者你可能记错了端口号。另外,Kubernetes默认的NodePort范围是30000-32767,31107在这个范围内,这点没问题,但还是要确认集群有没有修改过这个范围。 - 另外,要确认你curl的
192.168.178.31确实是集群中某个节点(master或worker)的IP,而且该节点的防火墙(比如iptables、firewalld)没有拦截31107端口的入站流量。可以在节点上执行nc -zv 127.0.0.1 31107,先测试本地能不能连通这个端口。
2. 检查Service与Pod的关联状态
Service是通过标签选择器(selector)绑定Pod的,如果绑定失败,流量根本传不到Pod:
- 先查看Service的标签选择器:
kubectl -n kube-system get service traefik-web-ui -o jsonpath='{.spec.selector}' - 再查看Traefik UI Pod的标签:
对比两者的标签是否完全匹配——如果Service的selector和Pod的标签不一致,Service就找不到对应的Pod,此时执行kubectl -n kube-system get pods -l app=traefik-web-uikubectl -n kube-system describe service traefik-web-ui,会看到Endpoints字段是空的,这就是问题所在,需要修改Service的selector或者Pod的标签来匹配。
3. 验证Traefik UI Pod本身的可用性
如果Service和Pod关联正常,那就要确认Pod里的UI服务是否真的在运行:
- 先获取Traefik UI Pod的名称,然后查看容器的端口配置:
确认容器暴露的端口是kubectl -n kube-system describe pod <traefik-ui-pod-name>80(官方ui.yaml默认配置),并且Service的targetPort也指向了这个端口。 - 在集群内部测试Pod的连通性:临时启动一个busybox Pod,然后在里面curl Pod的IP和端口:
如果能正常返回内容,说明Pod本身没问题;如果不行,查看Pod日志排查UI服务的启动问题:kubectl run -it --rm busybox --image=busybox:1.28 # 进入容器后执行 curl http://<traefik-ui-pod-ip>:80kubectl -n kube-system logs <traefik-ui-pod-name>
4. 检查集群网络组件状态
如果以上都没问题,那可能是集群的网络转发出了问题:
- 检查kube-proxy的状态,它负责NodePort的流量转发:
确保所有kube-proxy Pod都处于kubectl -n kube-system get pods -l k8s-app=kube-proxyRunning状态,如果有异常,查看日志排查。 - 检查节点上的iptables规则,确认有针对
31107端口的转发规则:
如果找不到相关规则,说明kube-proxy没有正确生成转发规则,可能需要重启kube-proxy Pod或者排查网络插件(比如Calico、Flannel)的状态。iptables-save | grep 31107
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

