kubectl无法连接Kubernetes集群,提示localhost:8080连接被拒绝的问题求助
解决kubectl连接Kubernetes集群时的localhost:8080拒绝问题
从你的描述里,我一眼就看到了最关键的问题——你的kubeconfig配置里current-context是空字符串:
current-context: ""
kubectl在没有明确指定上下文的情况下,会优先使用current-context指向的配置;如果这个值为空,它就会默认尝试连接localhost:8080,这就是你看到错误的直接原因。
第一步:设置默认上下文
先执行这条命令,把你已有的username-context设为默认上下文:
kubectl config use-context username-context
执行完后,用kubectl config view确认current-context已经变成username-context,再重新尝试kubectl cluster-info或者kubectl get pods,大概率就能正常连接了。
如果还是不行,再排查这些细节:
- 检查证书路径是否正确:你的配置里用了相对路径
.certs/username.crt和.certs/username.key,这个路径是相对于你执行kubectl命令时的工作目录的,很容易出错。建议换成绝对路径,比如/Users/username/.kube/.certs/username.crt,避免路径解析问题。 - 验证证书有效性:用openssl测试证书能否正常访问集群:
如果连接失败,可能是证书过期、权限不对,或者集群端的证书配置有问题。openssl s_client -connect 10.95.xx.yy:6443 -cert .certs/username.crt -key .certs/username.key - 修正文件权限:kubeconfig和证书文件的权限不能太开放,否则kubectl会拒绝使用:
chmod 600 ~/.kube/config chmod 600 ~/.kube/.certs/username.crt chmod 600 ~/.kube/.certs/username.key - 确认集群地址可达:先ping一下
10.95.xx.yy测试网络连通性,再用curl验证端口:
这里把配置里的curl https://10.95.xx.yy:6443 --cacert <(echo "LS...==" | base64 -d) --cert .certs/username.crt --key .certs/username.keycertificate-authority-data值(LS...==)用base64解码成CA证书,用来验证集群的SSL证书合法性。
先从设置默认上下文开始排查,这几乎肯定是你当前的问题根源。
内容的提问来源于stack exchange,提问作者E. Jaep
相关产品推荐
相关产品推荐

