K3s 启动失败因 10256 端口被占用,需检查并终止冲突进程;可禁用内置 kube-proxy 或修改其 healthz 端口为 10257;验证方式包括查看 Pod、日志及端口监听状态。

K3s 默认使用 iptables 模式运行 kube-proxy,如果系统中已有其他进程(如原生 kube-proxy、Docker 的 iptables 规则、或手动启动的代理服务)占用了 10256 端口(kube-proxy 的 healthz 端口),就会报 bind: address already in use 错误。
检查并释放 10256 端口
这是最常见原因,需确认端口是否被占用:
- 运行
sudo ss -tuln | grep :10256或sudo lsof -i :10256查看哪个进程在监听 - 若发现是残留的 kube-proxy 进程,用
sudo kill -9终止它 - 若 Docker 或其他容器运行时修改了 iptables 链,可临时清理:
sudo iptables -t nat -F(注意:仅测试环境建议,生产慎用)
禁用 K3s 内置 kube-proxy
如果你不需要或已自行部署 kube-proxy(例如用 IPVS 或 eBPF 方案),可直接关闭 K3s 自带的:
- 启动 K3s 时加参数:
--disable=traefik,servicelb,kube-proxy - 或编辑
/etc/rancher/k3s/config.yaml,添加一行:disable:下包含- kube-proxy - 重启服务:
sudo systemctl restart k3s
修改 kube-proxy 健康检查端口
不推荐常规使用,但适合调试或端口冲突无法解决时:
- 创建自定义 kube-proxy 配置文件(如
/var/lib/rancher/k3s/server/manifests/kube-proxy-config.yaml) - 覆盖默认配置,指定新端口:
healthzBindAddress: 127.0.0.1:10257 - K3s 会自动加载该配置,无需额外命令
验证 kube-proxy 是否正常运行
启动后确认状态:
- 查看 Pod:
kubectl get pods -n kube-system | grep kube-proxy - 检查日志:
kubectl logs -n kube-system -l k8s-app=kube-proxy - 确认端口监听:
sudo ss -tuln | grep :10256(或你改后的端口)










