kubelet注册节点时使用错误用户,无法完成注册求助
从你贴的日志和kubeconfig配置来看,核心问题是kubelet和API Server交互时,没能正确带上system:node:worker-1的身份标识,导致API Server认不出这个节点。结合你是在跟着《Kubernetes the Hard Way》适配AWS的场景,大概率是这几个配置点出了问题:
1. 先检查kubelet的客户端证书*Common Name(CN)*字段对不对
Kubernetes里用客户端证书认证时,API Server是从证书的Common Name(CN)里提取用户身份的。哪怕你kubeconfig里写对了user,如果证书的CN不是system:node:worker-1,API Server还是会识别成空的system:node:。
你可以用这个命令查看证书内容:
openssl x509 -in /var/lib/kubelet/client.crt -text -noout | grep "Subject:"
正常输出应该能看到CN=system:node:worker-1和O=system:nodes。如果不对,就得重新生成kubelet证书——按照教程步骤,生成时要指定--subject "/CN=system:node:worker-1/O=system:nodes"这个参数。
2. 确认kubelet的启动参数有没有配置到位
kubelet得明确知道要用你写的那个kubeconfig文件,还要指定正确的节点名称。你去看看kubelet的systemd配置文件(一般是/etc/systemd/system/kubelet.service或者/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),里面必须包含这两个参数:
--kubeconfig=/var/lib/kubelet/kubeconfig --node-name=worker-1
要是缺了这些,kubelet可能会用默认的证书路径(而不是你配置的kubeconfig),或者没法把身份和节点名关联起来。改完配置后,记得重启kubelet:
sudo systemctl daemon-reload sudo systemctl restart kubelet
3. 检查kubeconfig文件的权限和路径
kubelet得能读这个kubeconfig文件才行,所以权限要设对:
sudo chmod 600 /var/lib/kubelet/kubeconfig sudo chown root:root /var/lib/kubelet/kubeconfig
另外还要确认kubelet启动参数里写的kubeconfig路径,和你实际放文件的路径完全一致,路径错了的话kubelet根本加载不到正确配置。
4. 验证API Server的认证授权配置
要是你是按教程配的API Server,得确保它开了客户端证书认证,并且节点授权策略也配置对了。API Server的启动参数里必须有这两个:
--client-ca-file=/var/lib/kubernetes/ca.crt --authorization-mode=Node,RBAC
这俩参数保证API Server能验证kubelet的证书,并且允许节点身份执行必要的操作。
做完这些检查后,再去看kubelet日志,如果出现Successfully registered node worker-1的提示,就说明问题解决啦。
内容的提问来源于stack exchange,提问作者Giles Thomas

