你在 Kubernetes 上指定了正确的主机或端口错误吗

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

当我跑步的时候:

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

我得到了:

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

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

247901 次浏览

这个错误意味着 kubectl正试图连接到运行在本地计算机上的 Kubernetes apiserver,如果您没有将其配置为与远程 apiserver 通信,那么这是默认设置。

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

gcloud container clusters get-credentials "CLUSTER NAME"

这招对我很管用。

我用当地码头工人时遇到了麻烦。要做的事情是检查它旋转的容器的日志,以找出哪里出错了。对我来说,事情已经发生了

   $ 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

啊哈!我一直和 Cassandra 在一个码头集装箱里玩,我转发了所有的端口,因为我不确定哪个需要暴露,7001是它的一个端口。阻止卡珊德拉,收拾烂摊子,重新开始解决问题。

在教程的第3部分“使用库伯内特”中,在使用 Udacity 教程“使用库伯内特的可伸缩微服务”时,重现了同样的错误。

启动单个实例:

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.

如何解决错误:

登录 Google 云平台

导航到容器引擎 谷歌云平台,容器引擎

单击群集上的 连接

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

继续工作! ! !

如果您使用 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}

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

用适当的帐户和项目重新初始化 gcloud 对我来说很有用。

gcloud init

重试之后,成功执行下面的命令,并生成 kubeconfig 条目。

gcloud container clusters get-credentials "cluster_name"

检查群集信息

kubectl cluster-info

下面我也得到了相同的错误:

无法连接到服务器: 拨号 tcp [ : : 1] : 8080: Connectex: 无法建立连接,因为目标计算机主动拒绝了连接。

然后执行以下命令,发现一切正常。

附注 C: > . minikube.exe 启动

启动本地 Kubernetes v1.10.0集群..。 启动虚拟机。 下载 Minikube ISO 150.53 MB/150.53 MB [ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ]100.00.0s 获取 VM IP 地址..。 将文件移动到集群中..。 下载 kubeadm v1.10.0 正在下载忽必烈 v1.10.0 下载完毕 Kubelet v1.10.0 完成下载 kubeadm v1.10.0 建立证书..。 正在连接群集。 设置 kubeconfig..。 启动集群组件。 Kubectl 现在配置为使用集群。 从配置文件加载缓存的图像。 附注 C: > . minikube.exe 启动 启动本地 Kubernetes v1.10.0集群..。 启动虚拟机。 获取 VM IP 地址..。 将文件移动到集群中..。 建立证书..。 正在连接群集。 设置 kubeconfig..。 启动集群组件。 Kubectl 现在配置为使用集群。

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

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的节点的详细信息,如下所示,以列出当前名称空间中的所有 pods,并提供更多详细信息:
kubectl get nodes -o wide

应该可以了。

在运行“ 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”

我有同样的问题后重新启动,我按照指南描述的 给你

所以试试以下方法:

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

之后就没问题了。

不管您的环境(gcloud 与否)如何,您都需要将 kubectl 指向 kubeconfig。 默认情况下,kubectl 期望路径为 $HOME/. kube/config,或者将自定义路径指向 env 变量(用于脚本等) 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 密钥和 cert。

解决办法是:

minikube delete
minikube start --vm-driver none

我得到了同样的麻烦,因为几乎释放,似乎必须使用 KUBECONFIG 明确

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

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

Export KUBECONFIG = $HOME/admin.conf

我在使用“ Bash on Windows”和天蓝色的库伯内特时遇到了这个问题

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

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

为了解决这个 从 Bash 命令行 cp <yourWindowsPathToConfigPrintedFromAbobeCommand> ~/.kube/config运行

我也犯过同样的错误,这招对我管用,快跑

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

你可以继续了

我跑步的时候出错了

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

当作为非根执行 kubectl 时。

正确的答案是运行以下命令:

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


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


export KUBECONFIG=$HOME/admin.conf

如果有人,比如我,在从 gcr.io/cloud-builders/kubectl切换到 gcr.io/google.com/cloudsdktool/cloud-sdk时,由于他们的 Cloud Build 步骤中的潜在错误而碰到了这个线程,那么您需要显式地调用 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'

我试图与本地主机连接,结果出现了同样的问题,然后我发现,我需要启动一个代理到 Kubernetes API 服务器。

kubectl proxy --port=8080

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

作为对 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

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

minikube start

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

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

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

如果你使用的是 < strong > docker 桌面 ,请确保你使用的是 库伯内特启用:

Go to Preferences > Kubernetes and make sure 'Enable Kubernetes' is checked.

我通过使用以下命令删除 kube 配置的错误环境变量来解决这个问题

unset KUBECONFIG

修正错误-到服务器本地主机: 8080的连接被拒绝

  1. 检查 kubeconfig 环境变量是否被导出

Export KUBECONFIG =/etc/kubernetes/admin.conf 或 $HOME/. kube/config

  1. 检查你的。在主目录文件中的 kube 或 config。如果您没有找到它,那么您需要将它移动到主目录。使用以下命令

Cp/etc/kubernetes/admin.conf $HOME/

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

Export KUBECONFIG = $HOME/admin.conf

无论何时启动主节点,您都可能需要设置环境变量。因此这对你来说是一项重复的任务。可以使用以下命令永久设置它。

Echo‘ export KUBECONFIG = $HOME/admin.conf’> $HOME/. bashrc

对于我来说,它只是一个已满的磁盘,如果磁盘已满,kubectl 也会给出这个错误。遗憾的是,清理空间并不能立即帮助,重启对我来说是必要的。

  1. 激活系统中的 Docker
  2. 在终端运行 Minikube 开始命令

当我以 root 用户身份登录并运行命令 kubectl get pods 时出现错误

W1021 22:14:58.411448   41786 loader.go:223] Config not found: /etc/kubernetes/admin.conf The connection to the server localhost:8080 was refused - did you specify the right host or port?

并且没有 root 用户显示 pods 没有错误。

在我的例子中,我启动了 docker 桌面,启用了 kubernetes,并在终端上应用了 kubectl 命令,然后它工作了