You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubebuilder自定义K8s Controller部署遇资源锁获取I/O超时错误

Kubebuilder自定义Controller部署到Docker Desktop K8s集群的Leader选举超时问题

问题场景

  • 基于Kubebuilder构建的自定义Controller,本地执行make run时功能正常
  • 执行make docker-build custom-controller:0.1.0和make deploy custom-controller:0.1.0完成部署,命名空间、Controller Pod均成功创建
  • Pod日志出现Leader选举超时错误,无法访问集群kubernetes服务的ClusterIP(10.96.0.1:443)

错误日志

2024-03-26T13:49:16Z    INFO    setup   starting manager
2024-03-26T13:49:16Z    INFO    starting server {"kind": "health probe", "addr": "[::]:8081"}
2024-03-26T13:49:16Z    INFO    controller-runtime.metrics  Starting metrics server
2024-03-26T13:49:16Z    INFO    controller-runtime.metrics  Serving metrics server  {"bindAddress": "127.0.0.1:8080", "secure": false}
I0326 13:49:16.092772       1 leaderelection.go:250] attempting to acquire leader lease vault-system/9737ddd2.ivzdso...
E0326 13:49:46.093895       1 leaderelection.go:332] error retrieving resource lock vault-system/9737ddd2.ivzdso: Get "https://10.96.0.1:443/apis/coordination.k8s.io/v1/namespaces/vault-system/leases/9737ddd2.ivzdso": dial tcp 10.96.0.1:443: i/o timeout
E0326 13:50:18.973156       1 leaderelection.go:332] error retrieving resource lock vault-system/9737ddd2.ivzdso: Get "https://10.96.0.1:443/apis/coordination.k8s.io/v1/namespaces/vault-system/leases/9737ddd2.ivzdso": dial tcp 10.96.0.1:443: i/o timeout

原因分析

  1. 集群内部网络异常:Docker Desktop的K8s集群偶尔会出现CNI网络路由故障,导致Pod无法访问集群内部的ClusterIP服务(比如kubernetes服务)。本地make run通过主机kubeconfig直接连接API Server,不受集群内部网络影响,所以能正常运行。
  2. RBAC权限缺失(低概率):如果Controller的RBAC规则未配置coordination.k8s.io/leases资源的相关权限,理论上会返回权限错误而非超时,但仍可作为排查点。
  3. 主机网络干扰:主机的VPN、代理、防火墙规则可能拦截了K8s集群内部的流量,导致Pod无法路由到ClusterIP网段。

解决办法

  • 重启Docker Desktop K8s集群:打开Docker Desktop设置→Kubernetes,先禁用再启用集群,等待集群完全重启后重新部署Controller,这是最快速的修复方式。
  • 验证Pod内部网络连通性:进入Controller Pod执行网络测试:
    kubectl exec -it <controller-pod-name> -n vault-system -- sh
    curl -v https://10.96.0.1:443/healthz
    
    如果无法连通,确认集群网络故障,优先重启集群。
  • 检查RBAC权限配置:查看Controller对应的ClusterRole,确认包含coordination.k8s.io/leases资源的权限:
    kubectl describe clusterrole <controller-clusterrole-name> -n vault-system
    
    如果权限缺失,修改config/rbac/rbac.yaml中的规则,添加以下权限后重新部署:
    - apiGroups: ["coordination.k8s.io"]
      resources: ["leases"]
      verbs: ["get", "list", "create", "update", "delete"]
    
  • 排查主机网络干扰:关闭主机的VPN、代理软件,检查防火墙是否允许K8s集群网段(默认10.96.0.0/12、192.168.49.0/24)的内部流量。

内容的提问来源于stack exchange,提问作者iwrestledthebeartwice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:52:53