K3s kube-proxy 启动失败报 “bind: address already in use”

12次阅读

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

K3s kube-proxy 启动失败报 “bind: address already in use”proxy,如果系统中已有其他进程(如原生 kube-proxy、docker 的 iptables 规则、或手动启动的代理服务)占用了 10256 端口(kube-proxy 的 healthz 端口),就会报 bind: address already in use 错误。

检查并释放 10256 端口

这是最常见原因,需确认端口是否被占用:

  • 运行 sudo ss -tuln | grep :10256sudo 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(或你改后的端口)
text=ZqhQzanResources