K3S集群中Traefik未绑定节点80/443端口问题排查求助
K3S双节点集群Traefik端口未监听及重复svclb DaemonSet问题排查方案
核心问题梳理
- 双节点K3S v1.21.5+k3s1集群,默认安装Traefik作为Ingress Controller,预期绑定节点80/443端口,但
netstat检测无监听进程,无法访问Pod - 存在两个
svclb-traefik相关DaemonSet:一个运行中但Pod曾重启(Exit Code 255),另一个因端口占用无法调度,删除后重启节点会自动重建
下一步排查方向
1. 确认节点80/443端口占用情况
使用更高效的端口检测命令,排查是否有其他进程抢占端口:
# 查看80/443端口的监听进程 ss -tulpn | grep -E ":80|:443" # 或者用lsof(需先安装) lsof -i :80 -i :443
如果发现其他进程(如nginx、httpd等)占用端口,停止对应服务后重启svclb-traefik Pod。
2. 分析正常svclb-traefik Pod的退出原因
虽然Pod当前显示Running,但之前出现过Exit Code 255的异常终止,需查看容器日志定位问题:
# 查看lb-port-80容器日志 kubectl -n kube-system logs svclb-traefik-pjffb lb-port-80 # 查看lb-port-443容器日志 kubectl -n kube-system logs svclb-traefik-pjffb lb-port-443
重点关注是否有端口绑定失败、无法连接Traefik Service(10.43.82.221)等错误信息。
3. 验证Traefik Service的可达性
确认Traefik Service能正常转发流量到后端Pod:
# 在集群节点或任意Pod内测试Service连通性 curl http://10.43.82.221 curl -k https://10.43.82.221 # 检查Service后端Endpoint状态 kubectl -n kube-system get endpoints traefik
如果Service不可达,需排查kube-proxy组件状态、节点iptables转发规则是否正常。
4. 定位重复svclb DaemonSet的生成原因
从Service事件可见,第二个DaemonSet由service-controller生成,需进一步排查:
# 查看K3S server日志,搜索svclb相关记录 tail -n 100 /var/log/k3s.log | grep -i svclb # 检查Traefik Service是否被手动修改过 kubectl -n kube-system get svc traefik -o yaml
重点关注Service的spec.type、注解或标签是否有异常变更,导致service-controller重复生成DaemonSet。
5. 处理Klipper-lb版本不一致问题
正常DaemonSet使用rancher/klipper-lb:v0.2.0,异常DaemonSet使用v0.4.0,版本差异可能引发冲突:
- 删除异常DaemonSet后,检查Traefik Service的配置,避免触发controller重新生成
- 若问题反复,可手动修改异常DaemonSet的镜像版本为
v0.2.0,测试是否能正常调度
6. 检查节点防火墙与iptables规则
确认节点本地防火墙(如iptables、firewalld)未拦截80/443端口,同时验证Kubernetes转发规则:
# 查看traefik相关iptables规则 iptables-save | grep -i traefik # 检查AWS安全组是否开放80/443端口(针对外部访问)
7. 确认Traefik Pod自身状态
检查Traefik Pod的启动日志,确认其正常监听8000/8443端口(对应Service的TargetPort):
kubectl -n kube-system logs $(kubectl -n kube-system get pods -l app.kubernetes.io/name=traefik -o name)
内容的提问来源于stack exchange,提问作者redsoxfantom
相关产品推荐
相关产品推荐

