Kubernetes集群安装问题:节点加入主节点时连接被拒绝
解决kubeadm join连接API服务器失败的问题
嘿,我来帮你排查这个在Ubuntu 16.04从节点执行kubeadm join时连接主节点API服务器失败的问题,这类问题在搭建K8s集群时挺常见的,咱们一步步来定位解决:
1. 先确认网络连通性是否正常
这是最常见的触发原因,先从基础的网络检查开始:
- 在从节点上测试主节点IP的可达性:
如果ping不通,先排查主从节点的网络配置(比如是否在同一网段、路由是否正常、云服务器安全组是否放行)。ping <master ip> - 检查主节点6443端口是否开放(K8s API Server默认监听端口):
先在从节点安装netcat(如果没装的话):
然后测试端口连通性:sudo apt-get update && sudo apt-get install netcat -y
如果连接失败,去主节点开放该端口:nc -zv <master ip> 6443
(如果主节点用的是iptables等其他防火墙工具,要对应添加放行规则)sudo ufw allow 6443/tcp
2. 检查主节点kube-apiserver状态
如果网络没问题,那要确认主节点的API服务是否正常运行:
- 在主节点上查看kube-system命名空间下的pod状态:
找到kubectl get pods -n kube-systemkube-apiserver-<你的主节点名称>这个pod,确保它的状态是Running。 - 如果pod未运行,查看日志排查原因:
常见原因包括端口被占用、证书配置错误、etcd连接失败等。kubectl logs kube-apiserver-<你的主节点名称> -n kube-system
3. 验证join命令的token和CA哈希是否有效
K8s的默认join token有效期为24小时,过期后就无法使用;另外手动复制时也容易输错:
- 在主节点重新生成有效的join命令:
直接复制这个命令输出的完整内容,在从节点执行,避免手动输入token和哈希时出错。kubeadm token create --print-join-command
4. 检查Ubuntu 16.04的K8s前置配置是否符合要求
Ubuntu 16.04有几个特定的配置必须满足,否则会影响集群节点加入:
- 关闭Swap:K8s要求必须关闭swap,临时关闭:
永久关闭(避免重启后恢复):编辑sudo swapoff -a/etc/fstab文件,注释掉包含swap的行,然后保存退出。 - 加载必要内核模块:确保
br_netfilter模块已加载:
如果没有输出,手动加载并设置开机自动加载:lsmod | grep br_netfiltersudo modprobe br_netfilter echo br_netfilter | sudo tee /etc/modules-load.d/k8s.conf - 配置sysctl参数:确保桥接的流量能被iptables正确处理:
sudo sysctl net.bridge.bridge-nf-call-iptables=1 echo net.bridge.bridge-nf-call-iptables=1 | sudo tee /etc/sysctl.d/k8s.conf sudo sysctl --system
5. 确保主从节点的K8s组件版本一致
kubeadm、kubelet、kubectl的版本必须完全匹配,否则会出现兼容性问题:
- 在主节点和从节点分别执行以下命令查看版本:
如果版本不一致,需要在从节点重装对应版本的组件,确保和主节点完全相同。kubeadm version kubelet --version
内容的提问来源于stack exchange,提问作者chrx
相关产品推荐
相关产品推荐

