K3s局域网Nginx Ingress部署无连接问题排查求助
K3s禁用Traefik后Nginx Ingress访问故障排查步骤
检查Nginx Ingress Controller运行状态
- 执行
kubectl get pods -n ingress-nginx,确认所有Controller Pod处于Running状态,无重启或CrashLoopBackOff情况 - 查看Controller日志定位错误:
kubectl logs -n ingress-nginx <nginx-ingress-controller-pod-name>,重点关注网络连接、权限相关报错
- 执行
验证Ingress与Service/Endpoint的关联
- 执行
kubectl describe ingress <your-ingress-name>,检查Rules字段中关联的Service是否存在,以及Endpoints字段是否包含后端Pod的IP地址 - 单独确认Service的Endpoint状态:
kubectl get endpoints <your-service-name>,确保列表中有正常的Pod IP,说明Service与Pod绑定正常
- 执行
核对Ingress Controller的端口配置
- 若使用NodePort模式,执行
kubectl get svc -n ingress-nginx,确认输出中的NodePort端口(通常为30000+范围)与你访问的端口一致 - 若使用HostNetwork模式,在服务器本机执行
netstat -tulpn | grep nginx,确认主机的80/443端口被nginx进程监听
- 若使用NodePort模式,执行
测试后端服务的可达性
- 在Nginx Controller Pod内测试后端Service:
kubectl exec -n ingress-nginx <controller-pod> -- curl http://<service-cluster-ip>:<port>,确认能正常返回内容,排除后端服务本身故障 - 在服务器本机直接访问后端Pod:
curl http://<pod-ip>:<port>,验证Pod自身服务运行正常
- 在Nginx Controller Pod内测试后端Service:
检查K3s集群网络配置
- 确认flannel网络组件正常运行:
kubectl get pods -n kube-system -l app=flannel,所有Pod需处于Running状态 - 单节点环境可跳过,多节点环境需验证节点间Pod网络互通:在任意节点ping其他节点的Pod IP,确认无网络隔离
- 确认flannel网络组件正常运行:
确认Ingress Class配置
- 检查Ingress资源的
spec.ingressClassName字段是否设置为nginx,K3s禁用Traefik后需明确指定Ingress Class - 查看集群中的IngressClass资源:
kubectl get ingressclass,确保存在名为nginx的IngressClass,且Nginx Controller已关联该Class
- 检查Ingress资源的
检查Nginx配置生成情况
- 进入Controller Pod查看自动生成的配置:
kubectl exec -n ingress-nginx <controller-pod> -- cat /etc/nginx/nginx.conf,搜索你的Ingress域名,确认存在对应的upstream配置,且upstream列表包含后端Pod的IP
- 进入Controller Pod查看自动生成的配置:
内容的提问来源于stack exchange,提问作者user2728349
相关产品推荐
相关产品推荐

