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

Kubelet启动失败:无法创建证书签名请求(Unauthorized)求助

解决kubeadm添加Worker节点时kubelet启动失败(Unauthorized创建CSR)的问题

我来帮你排查这个棘手的问题——你遇到的failed to run Kubelet: cannot create certificate signing request: Unauthorized错误,核心原因是Worker节点的kubelet在向Master请求创建证书签名请求(CSR)时没有获得授权,咱们一步步来解决:

1. 先确认Bootstrap Token的有效性

Kubeadm的默认bootstrap token有24小时的有效期,如果你之前生成的token已经过期,就会导致授权失败。在Master节点上执行以下命令检查token状态:

kubeadm token list

如果看到token的TTL显示已过期,或者根本找不到对应的token,重新生成一个新的token:

kubeadm token create

然后重新获取CA哈希值(用你之前的命令),再用新的token执行kubeadm join命令。

2. 检查Master上的RBAC权限配置

Kubeadm依赖RBAC规则来赋予bootstrap节点创建CSR的权限,1.10版本默认会创建system:bootstrappers:kubeadm:default-node-token这个ClusterRoleBinding,如果这个绑定丢失或者权限不对,就会导致Unauthorized错误。

在Master节点上检查该绑定是否存在:

kubectl get clusterrolebinding system:bootstrappers:kubeadm:default-node-token

如果不存在,手动创建这个绑定:

# 创建rbac-bootstrap.yaml文件,内容如下
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:bootstrappers:kubeadm:default-node-token
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:node-bootstrapper
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:bootstrappers:kubeadm:default-node-token

然后执行:

kubectl apply -f rbac-bootstrap.yaml

3. 清理Worker节点的旧配置并重新Join

有时候kubeadm在第一次join失败后会留下无效的配置文件,导致kubelet启动异常。在Worker节点上执行重置命令:

kubeadm reset

之后不要加--skip-preflight-checks(除非你确认预检查的问题不影响),重新执行完整的join命令:

kubeadm join --token <你的新token> --discovery-token-ca-cert-hash sha256:<你的CA哈希值> master_ip:6443

4. 验证OpenStack环境的网络连通性

因为你的集群部署在OpenStack上,必须确保Worker节点能正常访问Master的6443端口:

  • 在Worker节点上执行telnet master_ip 6443,测试端口是否连通
  • 如果不通,检查OpenStack的安全组规则,确保允许Worker节点访问Master的6443端口(TCP协议)

5. 处理日志中的其他警告(非紧急但建议修复)

日志里还有两个警告,虽然不是当前kubelet启动失败的原因,但建议后续修复:

  • CNI配置缺失:No networks found in /etc/cni/net.d,等kubelet正常启动后,部署CNI插件(比如Flannel、Calico)即可解决
  • conntrack未安装:在Worker节点上安装conntrack工具:
    # Debian/Ubuntu系统
    apt-get install conntrack
    # CentOS/RHEL系统
    yum install conntrack-tools
    

最后验证

完成以上步骤后,在Worker节点上启动kubelet:

systemctl start kubelet

然后查看kubelet日志确认没有Unauthorized错误:

journalctl -u kubelet -f

回到Master节点,查看CSR请求并批准:

# 查看待批准的CSR
kubectl get csr
# 批准对应Worker节点的CSR
kubectl certificate approve <csr-name>

之后执行kubectl get nodes,就能看到新的Worker节点了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:52