离线模式执行kubectl报错localhost:8080连接被拒绝
问题现象
离线模式下执行kubectl命令持续报错,执行kubectl cordon hhpsoscr0001时返回以下错误:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
排查方向
该报错核心原因是kubectl未加载到正确的集群连接配置,默认尝试连接本地8080端口的kube-apiserver服务,离线环境下本地不会启动该服务,因此触发连接拒绝,按以下优先级排查:
- 检查默认kubeconfig文件是否存在:kubectl默认读取
~/.kube/config路径的集群配置,先执行ls -l ~/.kube/config确认文件是否存在,是否存在误删、空文件、损坏的情况 - 检查kubeconfig配置有效性:执行
kubectl config view查看加载的配置内容,确认clusters字段下的server地址为集群实际的apiserver地址,而非默认的localhost:8080;同时确认users字段下配置的客户端证书、密钥路径真实存在,证书未过有效期 - 检查KUBECONFIG环境变量是否异常:执行
echo $KUBECONFIG查看输出,若输出非空,确认对应路径下的配置文件是否有效,离线环境下如果之前配置过临时环境变量,会话重置后路径失效就会触发该报错 - 检查执行用户的配置与权限:如果用普通用户执行命令,确认当前用户对
~/.kube/config有读权限;如果切换到root用户执行,确认/root/.kube/config路径下存在有效配置,不要跨用户混用kube配置文件
解决方法
- kubeconfig丢失/损坏修复:从集群master节点的
/etc/kubernetes/admin.conf路径拷贝有效配置文件,通过离线介质传到操作机后执行以下命令部署配置:
mkdir -p ~/.kube cp /path/to/transferred/admin.conf ~/.kube/config chmod 600 ~/.kube/config
- 环境变量异常修复:执行
unset KUBECONFIG清空错误的环境变量配置,重新加载shell会话后重试命令 - apiserver地址配置错误修复:编辑
~/.kube/config文件,将clusters配置段下的server字段修改为集群实际的apiserver访问地址,执行curl -k https://<替换为实际apiserver地址>:6443/healthz验证连通性,返回ok即代表网络连通正常 - 证书过期修复:在master节点重新签发kubectl访问用的客户端证书,替换config文件中对应的旧证书、密钥字段即可
离线环境排查时不需要额外部署公网依赖组件,只要保证kubeconfig配置正确、操作机到apiserver地址的网络路由可达即可正常执行kubectl命令
内容的提问来源于stack exchange,提问作者arpita22
相关产品推荐
相关产品推荐

