当您在使用kubectl时遇到“拒绝连接到服务器[IP]:[PORT]”的错误时,您可以采取以下对策
简而言之
-
- 如果在kubectl get pods中返回了上述错误,请检查连接目标是否设置错误。
-
- 连接目标可以通过kubectl config view的clusters > cluster > server进行确认。
- 可以通过kubectl config set-cluster [cluster-name] –server=https://[IP]:[PORT]进行连接目标的修改。
发生的事件
我之前在本地使用docker-for-mac运行Kubernetes,但是突然发现在运行kubectl get nodes命令时出现了以下错误。
$ kubectl get nodes
The connection to the server localhost:6443 was refused - did you specify the right host or port?
另外,即使使用kubectl describe nodes命令,也无法连接到服务器,返回了错误信息,原因不清楚。
$ kubectl describe nodes
Unable to connect to the server: EOF
原因 – reason, cause
配置文件中指定的集群连接目标错误。
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://localhost:6443
name: docker-for-desktop-cluster
似乎在某个时间点将 localhost 进行了修改。
解决方案
我们将通过以下方式解决。
-
- 调查应连接的IP地址和端口号
- 修改配置
调查应连接的IP地址和端口号。
幸运的是,由于是本地环境,我们可以获取正在运行的Docker容器的信息。首先,确保Kubernetes的系统容器可见。这个操作可以在图形用户界面上完成。
请勾选最底部的显示系统容器(高级)选项。
接下来,我们将寻找Docker正在监听的端口。这次我们将使用docker ps –no-trunc命令来执行并通过检查容器的COMMAND字段来确认。一旦执行,将输出大量的文本,我们需要从中找到目标kube-apiserver命令的参数–advertise-address。
$ docker ps --no-trunc | grep 'advertise-address='
(lots of texts)
由于很难直接发现,我认为利用搜索功能在输出结果中找到会更容易。请搜索以下字符串,并找到等号右侧的字符(IP地址和端口号)根据不同环境可能会有所不同。
--advertise-address=192.168.65.3
--secure-port=6443
更改配置文件
使用下列命令进行替换。
$ kubectl config set-cluster docker-for-desktop-cluster \
--server=https://[IPADDR]:[PORT]
在Docker for Desktop集群中输入您希望使用的集群名称。请使用之前查询到的值替换[IP地址]和[端口号]。
确认
可以使用kubectl get pods来确认。可能会返回以下类似的消息。
$ kubectl get pods
No resources found.
这只是因为还没有任何pod,所以是正常的。如果设置不正确,你会收到前面的错误信息,或者即使等待再长时间也不会收到任何东西。
请阅读以下内容参考中国的翻译。
-
- The connection to the server :6443 was refused – did you specify the right host or port? – General Discussions – Discuss Kubernetes
-
- 【kubectl】The connection to the server localhost:8080 was refused と叱られる – DRYな備忘録
-
- Hello Minikube – Kubernetes
-
- Running Kubernetes Locally via Docker – kubectl get nodes returns The connection to the server localhost:8080 was refused – did you specify the right host or port? · Issue #23726 · kubernetes/kubernetes
-
- Kubernetes “did you specify the right host or port?” – Qiita
-
- “Kubernetes is starting…” state never ends · Issue #2990 · docker/for-mac
-
- Kubernetes does not complete startup, “Kubernetes is starting” · Issue #1649 · docker/for-win
- Docker for MacでKubernetes インストールからデプロイまで – Qiita