112

我遵循了http://kubernetes.io/docs/hellonode/上的 helloword 教程。

当我运行时:

kubectl run hello-node --image=gcr.io/PROJECT_ID/hello-node:v1 --port=8080

我得到:

与服务器 localhost:8080 的连接被拒绝 - 您是否指定了正确的主机或端口?

为什么命令行尝试连接到本地主机?

4

24 回答 24

104

问题是你kubeconfig的不对。要自动生成它,请运行:

gcloud container clusters get-credentials "CLUSTER NAME"

这对我有用。

于 2016-05-12T13:45:22.000 回答
35

确保您的配置设置为项目 -

gcloud config set project [PROJECT_ID]
  1. 运行帐户中集群的清单:
gcloud container clusters list
  1. 检查输出:
NAME           LOCATION       MASTER_VERSION  MASTER_IP      MACHINE_TYPE  NODE_VE.      NUM_NODES  STATUS
alpha-cluster  asia-south1-a  1.9.7-gke.6     35.200.254.78  f1-micro      1.9.7-gke.6   3          RUNNING
  1. 运行以下 cmd 以获取正在运行的集群的凭据:
gcloud container clusters get-credentials your-cluster-name --zone your-zone       --project your-project
  1. 以下输出如下:
Fetching cluster endpoint and auth data.
kubeconfig entry generated for alpha-cluster.
  1. 尝试检查正在运行的节点的详细信息,kubectl如下所示,以列出当前命名空间中的所有 pod,并提供更多详细信息:
kubectl get nodes -o wide

去应该不错。

于 2018-11-04T03:20:59.787 回答
18

我有同样的错误,这对我有用。跑

minikube status

如果响应是

type: Control Plane
host: Stopped
kubelet: Stopped
apiserver: Stopped
kubeconfig: Stopped

minikube start

type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

你可以继续

于 2020-08-22T04:18:00.833 回答
12

运行“kubeinit”命令后,kubernetes 要求您以普通用户身份运行以下命令

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

但是,如果您以普通用户身份运行此程序,您将收到“与服务器 localhost:8080 的连接被拒绝 - 您是否指定了正确的主机或端口?” 尝试以 root 用户身份访问时,反之亦然。所以尝试以执行上述命令的用户身份访问“kubectl”

于 2018-12-21T06:35:40.967 回答
5

从 Udacity 学习名为 Scalable Microservices with Kubernetes https://classroom.udacity.com/courses/ud615的教程时,在使用 Kubernetes,课程第 3 部分时重现了相同的错误。

启动单个实例:

kubectl run nginx --image=nginx:1.10.0

错误:

Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.

我如何解决错误:

登录谷歌云平台

导航到 Container Engine 谷歌云平台,Container Engine

单击 集群上的连接

使用登录凭据访问您终端中的集群 [NAME]

继续工作!!!

于 2017-05-14T04:13:50.473 回答
5

我试图与本地主机连接并最终遇到同样的问题,然后我发现,我需要启动 Kubernetes API 服务器的代理。

kubectl proxy --port=8080

https://kubernetes.io/docs/tasks/extend-kubernetes/http-proxy-access-api/

于 2021-03-28T12:34:17.513 回答
4

发生是因为您的 kubectl 无法连接到 kubernetes 服务器。运行您的集群。

minikube start

如果你想访问你的 kube 配置文件的服务,你可以通过

 kubectl --kubeconfig ~/.kube/config  get jobs

~/.kube/config : 配置文件的路径,修改你的文件路径

于 2021-06-24T18:42:13.087 回答
3

此错误意味着kubectl正在尝试连接到本地计算机上运行的 Kubernetes apiserver,如果您尚未将其配置为与远程 apiserver 通信,则这是默认设置。

于 2016-04-17T06:51:31.790 回答
3

运行时出现错误

sudo kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

最后,对于我的环境,此命令参数有效

sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get pods

以非 root 身份执行 kubectl 时。

于 2020-11-13T07:29:31.427 回答
3

无论您的环境如何(gcloud 与否),您都需要将 kubectl 指向 kubeconfig。默认情况下,kubectl 期望路径为 $HOME/.kube/config 或将您的自定义路径指向环境变量(用于脚本等) export KUBECONFIG=/your_kubeconfig_path

请参考:: https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/

如果您的集群没有 kubeconfig 文件,请参考创建一个 :: https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/

需要找到集群的 ca.crt 、 apiserver-kubelet-client 密钥和证书。

于 2019-07-18T05:00:17.820 回答
3

重新启动后我遇到了同样的问题,我按照此处描述的指南进行操作

所以尝试以下方法:

$ sudo -i
# swapoff -a
# exit
$ strace -eopenat kubectl version

之后它工作正常。

于 2019-03-09T06:33:38.217 回答
3

使用正确的帐户和项目重新初始化 gcloud 对我有用。

gcloud init

重试后,以下命令成功并生成了 kubeconfig 条目。

gcloud container clusters get-credentials "cluster_name"

检查集群信息

kubectl cluster-info
于 2018-05-11T12:30:20.423 回答
3

作为对Omokahfe的改进:

minikube status

如果响应是

E0623 09:12:24.603405   21127 status.go:396] kubeconfig endpoint: extract IP: "minikube" does not appear in /home/<user>/.kube/config
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Misconfigured
timeToStop: Nonexistent


WARNING: Your kubectl is pointing to stale minikube-vm.
To fix the kubectl context, run `**minikube update-context**`

minikube update-context

然后它会显示

* "minikube" context has been updated to point to 10.254.183.66:8443
* Current context is "minikube"

接着

minikube status

将会呈现

type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
timeToStop: Nonexistent
于 2021-06-23T10:30:21.937 回答
2

尝试使用sudo权限模式运行
示例 sudo kubectl....

于 2018-03-16T22:49:51.707 回答
2

如果您使用 kops 在 AWS 上创建了一个集群,那么 kops 会~/.kube/config为您创建,这很好。但是如果其他人需要连接到该集群,那么他们还需要安装 kops 以便它可以为您创建 kubeconfig:

export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
export CLUSTER_ALIAS=kubernetes-cluster

kubectl config set-context ${CLUSTER_ALIAS} \
    --cluster=${CLUSTER_FULL_NAME} \
    --user=${CLUSTER_FULL_NAME}

kubectl config use-context ${CLUSTER_ALIAS}

kops export cluster --name ${CLUSTER_FULL_NAME} \
  --region=${CLUSTER_REGION} \
  --state=${KOPS_STATE_STORE}
于 2018-03-13T19:19:21.890 回答
2

几乎发布以来我遇到了同样的麻烦,似乎必须明确使用 KUBECONFIG

sudo cp /etc/kubernetes/admin.conf $HOME/

sudo chown $(id -u):$(id -g) $HOME/admin.conf

导出 KUBECONFIG=$HOME/admin.conf

于 2020-08-06T05:18:27.667 回答
2

我在使用本地 docker 时遇到了这个问题。要做的事情是检查容器的日志以找出问题所在。对我来说,etcd 已经崩溃了

   $ docker logs <etcdContainerId>
   <snip>
   2016-06-15 09:02:32.868569 C | etcdmain: listen tcp 127.0.0.1:7001: bind: address already in use

啊哈!我一直在 docker 容器中使用 Cassandra,并且我转发了所有端口,因为我不确定它需要暴露哪个端口,而 7001 是它的端口之一。停止 Cassandra,清理混乱并重新启动它修复了问题。

于 2016-06-15T09:55:48.643 回答
2

综上所述,正确答案是运行以​​下命令:

sudo cp /etc/kubernetes/admin.conf $HOME/

sudo chown $(id -u):$(id -g) $HOME/admin.conf

export KUBECONFIG=$HOME/admin.conf
于 2021-01-18T22:18:49.787 回答
0

我通过使用命令删除 kube 配置的不正确环境变量解决了这个问题

unset KUBECONFIG
于 2022-01-05T01:00:53.100 回答
0

我在使用带有 azure kubernetes 的“Bash on Windows”时遇到了这个问题

az aks get-credentials -n <myCluster>-g <myResourceGroup>

配置文件是自动生成的,并根据操作系统放置在“~/.kube/config”文件中(在我的例子中是 windows)

要解决这个问题 - 从 Bash 命令行运行cp <yourWindowsPathToConfigPrintedFromAbobeCommand> ~/.kube/config

于 2020-08-20T14:01:34.150 回答
0

如果像我这样的人在从 切换gcr.io/cloud-builders/kubectl到时由于其 Cloud Build 步骤中的潜在错误而遇到此线程gcr.io/google.com/cloudsdktool/cloud-sdk,您将需要明确要求get-credentials工作kubectl。我的管道:

steps:
  - name: gcr.io/google.com/cloudsdktool/cloud-sdk
    entrypoint: 'sh'
    args:
      - '-c'
      - |
        gcloud container clusters get-credentials --zone "$$CLOUDSDK_COMPUTE_ZONE" "$$CLOUDSDK_CONTAINER_CLUSTER"
        kubectl call-what-you-need-here
options:
  env:
    - 'CLOUDSDK_COMPUTE_ZONE=europe-west3-a'
    - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
于 2021-03-04T14:00:08.157 回答
0

我也遇到了同样的错误:

无法连接到服务器:dial tcp [::1]:8080: connectex: 由于目标机器主动拒绝,无法建立连接。

然后我只执行下面的命令,发现一切正常。

PS C:> .\minikube.exe 启动

正在启动本地 Kubernetes v1.10.0 集群...正在启动 VM...正在下载 Minikube ISO 150.53 MB / 150.53 MB [========================== ==================] 100.00% 0s 获取VM IP地址...将文件移入集群...正在下载kubeadm v1.10.0 正在下载kubelet v1.10.0 已完成下载kubelet v1 .10.0 完成下载 kubeadm v1.10.0 设置证书...连接到集群...设置 kubeconfig...启动集群组件... Kubectl 现在配置为使用集群。从配置文件加载缓存的图像。PS C:> .\minikube.exe start 启动本地 Kubernetes v1.10.0 集群...正在启动 VM...获取 VM IP 地址...将文件移动到集群...设置证书...连接到集群.. . 设置 kubeconfig... 启动集群组件... Kubectl 现在配置为使用集群。

于 2018-06-16T09:56:19.907 回答
-1

如果您使用的是 docker desktop,请确保您已启用 Kubernetes

Go to Preferences > Kubernetes and make sure 'Enable Kubernetes' is checked.
于 2021-08-03T18:22:32.607 回答
-3

解决方案是这样的:

minikube delete
minikube start --vm-driver none
于 2019-10-04T12:39:09.700 回答