您是否指定了正确的主机或端口? Kubernetes 上的错误
did you specify the right host or port? error on Kubernetes
我已经学习了 http://kubernetes.io/docs/hellonode/ 上的 helloword 教程。
当我运行:
kubectl run hello-node --image=gcr.io/PROJECT_ID/hello-node:v1 --port=8080
我得到:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
为什么命令行尝试连接到本地主机?
此错误意味着 kubectl
正在尝试连接到本地计算机上的 Kubernetes apiserver 运行,如果您尚未将其配置为与远程 apiserver 通信,则这是默认设置。
问题是你的kubeconfig
不对。
自动生成 运行:
gcloud container clusters get-credentials "CLUSTER NAME"
这对我有用。
我在使用本地 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,清理混乱并重新启动它修复问题。
在使用 Kubernetes,课程的第 3 部分执行来自 Udacity 的名为 Scalable Microservices with Kubernetes https://classroom.udacity.com/courses/ud615 的教程时,重现相同的错误。
启动单个实例:
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云平台
导航到容器引擎
Google Cloud Platform, Container Engine
在群集上单击 连接
在您的终端中使用登录凭据访问集群 [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: 无法建立连接,因为目标机器主动拒绝它。
然后我就执行下面的命令,发现一切正常。
PS C:> .\minikube.exe 开始
正在启动本地 Kubernetes v1.10.0 集群...
启动虚拟机...
下载 Minikube ISO
150.53 MB / 150.53 MB [============================================ ] 100.00% 0s
正在获取虚拟机 IP 地址...
将文件移动到集群中...
下载 kubeadm v1.10.0
下载 kubelet v1.10.0
kubelet v1.10.0 下载完成
完成下载 kubeadm v1.10.0
设置证书...
连接到集群...
设置 kubeconfig...
启动集群组件...
Kubectl 现在配置为使用集群。
从配置文件加载缓存图像。
PS C:> .\minikube.exe 开始
正在启动本地 Kubernetes v1.10.0 集群...
启动虚拟机...
正在获取虚拟机 IP 地址...
将文件移动到集群中...
设置证书...
连接到集群...
设置 kubeconfig...
启动集群组件...
Kubectl 现在配置为使用集群。
确保您的配置设置为项目 -
gcloud config set project [PROJECT_ID]
- 运行 帐户中集群的清单:
gcloud container clusters list
- 检查输出:
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
- 运行 以下 cmd 为您的 运行 集群获取凭据:
gcloud container clusters get-credentials your-cluster-name --zone your-zone --project your-project
- 以下输出如下:
Fetching cluster endpoint and auth data.
kubeconfig entry generated for alpha-cluster.
- 尝试检查节点 运行
kubectl
的详细信息,如下所示,以列出当前命名空间中的所有 pods,以及更多详细信息:
kubectl get nodes -o wide
应该可以了。
在 运行ning "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
但是,如果您 运行 作为普通用户进行此操作,您将在尝试以 root 用户身份访问时得到 "The connection to the server localhost:8080 was refused - did you specify the right host or port?",反之亦然。因此 尝试以执行上述命令的用户身份访问 "kubectl"。
我在重启后遇到了同样的问题,我按照 here
中描述的指南进行操作
所以请尝试以下操作:
$ sudo -i
# swapoff -a
# exit
$ strace -eopenat kubectl version
之后一切正常
无论您的环境如何(gcloud 与否),您都需要将 kubectl 指向 kubeconfig。
默认情况下,kubectl 期望路径为 $HOME/.kube/config 或将您的自定义路径指向环境变量(用于脚本等)
导出 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 密钥和证书。
解决方法是这样的:
minikube delete
minikube start --vm-driver none
临近发布后我遇到了同样的麻烦,似乎必须显式使用 KUBECONFIG
sudo cp /etc/kubernetes/admin.conf $HOME/
须藤 chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
我在将“Bash on Windows”与 azure kubernetes
一起使用时遇到了这个问题
az aks get-credentials -n <myCluster>-g <myResourceGroup>
配置文件根据OS自动生成并放置在'~/.kube/config'文件中(即windows我的情况)
要解决这个问题 -
运行 来自 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
以非 root 身份执行 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/
作为对的改进:
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
如果你想访问服务 w.r.t 你的 kube 配置文件,你可以通过
访问它
kubectl --kubeconfig ~/.kube/config get jobs
~/.kube/config : 配置文件路径,修改w.r.t你的文件路径
如果您使用的是 docker 桌面 ,请确保您有 启用 Kubernetes:
Go to Preferences > Kubernetes and make sure 'Enable Kubernetes' is checked.
我通过使用命令删除不正确的 kube 配置环境变量解决了这个问题
unset KUBECONFIG
修复错误 – 与服务器的连接 localhost:8080 被拒绝
- 如果没有导出kubeconfig环境变量,检查是否导出
export KUBECONFIG=/etc/kubernetes/admin.conf 或 $HOME/.kube/config
- 检查主目录文件中的 .kube 或配置。如果您没有找到它,那么您需要将其移动到主目录。使用以下命令
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 也会给出这个错误。遗憾的是,清除 space 并没有立即帮助,我需要重新启动。
- 在您的系统中激活 Docker
- 运行 minikube 启动 终端命令
我已经学习了 http://kubernetes.io/docs/hellonode/ 上的 helloword 教程。
当我运行:
kubectl run hello-node --image=gcr.io/PROJECT_ID/hello-node:v1 --port=8080
我得到:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
为什么命令行尝试连接到本地主机?
此错误意味着 kubectl
正在尝试连接到本地计算机上的 Kubernetes apiserver 运行,如果您尚未将其配置为与远程 apiserver 通信,则这是默认设置。
问题是你的kubeconfig
不对。
自动生成 运行:
gcloud container clusters get-credentials "CLUSTER NAME"
这对我有用。
我在使用本地 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,清理混乱并重新启动它修复问题。
在使用 Kubernetes,课程的第 3 部分执行来自 Udacity 的名为 Scalable Microservices with Kubernetes https://classroom.udacity.com/courses/ud615 的教程时,重现相同的错误。
启动单个实例:
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云平台
导航到容器引擎 Google Cloud Platform, Container Engine
在群集上单击 连接
在您的终端中使用登录凭据访问集群 [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: 无法建立连接,因为目标机器主动拒绝它。
然后我就执行下面的命令,发现一切正常。
PS C:> .\minikube.exe 开始
正在启动本地 Kubernetes v1.10.0 集群... 启动虚拟机... 下载 Minikube ISO 150.53 MB / 150.53 MB [============================================ ] 100.00% 0s 正在获取虚拟机 IP 地址... 将文件移动到集群中... 下载 kubeadm v1.10.0 下载 kubelet v1.10.0 kubelet v1.10.0 下载完成 完成下载 kubeadm v1.10.0 设置证书... 连接到集群... 设置 kubeconfig... 启动集群组件... Kubectl 现在配置为使用集群。 从配置文件加载缓存图像。 PS C:> .\minikube.exe 开始 正在启动本地 Kubernetes v1.10.0 集群... 启动虚拟机... 正在获取虚拟机 IP 地址... 将文件移动到集群中... 设置证书... 连接到集群... 设置 kubeconfig... 启动集群组件... Kubectl 现在配置为使用集群。
确保您的配置设置为项目 -
gcloud config set project [PROJECT_ID]
- 运行 帐户中集群的清单:
gcloud container clusters list
- 检查输出:
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
- 运行 以下 cmd 为您的 运行 集群获取凭据:
gcloud container clusters get-credentials your-cluster-name --zone your-zone --project your-project
- 以下输出如下:
Fetching cluster endpoint and auth data.
kubeconfig entry generated for alpha-cluster.
- 尝试检查节点 运行
kubectl
的详细信息,如下所示,以列出当前命名空间中的所有 pods,以及更多详细信息:
kubectl get nodes -o wide
应该可以了。
在 运行ning "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
但是,如果您 运行 作为普通用户进行此操作,您将在尝试以 root 用户身份访问时得到 "The connection to the server localhost:8080 was refused - did you specify the right host or port?",反之亦然。因此 尝试以执行上述命令的用户身份访问 "kubectl"。
我在重启后遇到了同样的问题,我按照 here
中描述的指南进行操作所以请尝试以下操作:
$ sudo -i
# swapoff -a
# exit
$ strace -eopenat kubectl version
之后一切正常
无论您的环境如何(gcloud 与否),您都需要将 kubectl 指向 kubeconfig。 默认情况下,kubectl 期望路径为 $HOME/.kube/config 或将您的自定义路径指向环境变量(用于脚本等) 导出 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 密钥和证书。
解决方法是这样的:
minikube delete
minikube start --vm-driver none
临近发布后我遇到了同样的麻烦,似乎必须显式使用 KUBECONFIG
sudo cp /etc/kubernetes/admin.conf $HOME/
须藤 chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
我在将“Bash on Windows”与 azure kubernetes
一起使用时遇到了这个问题az aks get-credentials -n <myCluster>-g <myResourceGroup>
配置文件根据OS自动生成并放置在'~/.kube/config'文件中(即windows我的情况)
要解决这个问题 -
运行 来自 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
以非 root 身份执行 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/
作为对
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
如果你想访问服务 w.r.t 你的 kube 配置文件,你可以通过
访问它 kubectl --kubeconfig ~/.kube/config get jobs
~/.kube/config : 配置文件路径,修改w.r.t你的文件路径
如果您使用的是 docker 桌面 ,请确保您有 启用 Kubernetes:
Go to Preferences > Kubernetes and make sure 'Enable Kubernetes' is checked.
我通过使用命令删除不正确的 kube 配置环境变量解决了这个问题
unset KUBECONFIG
修复错误 – 与服务器的连接 localhost:8080 被拒绝
- 如果没有导出kubeconfig环境变量,检查是否导出
export KUBECONFIG=/etc/kubernetes/admin.conf 或 $HOME/.kube/config
- 检查主目录文件中的 .kube 或配置。如果您没有找到它,那么您需要将其移动到主目录。使用以下命令
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 也会给出这个错误。遗憾的是,清除 space 并没有立即帮助,我需要重新启动。
- 在您的系统中激活 Docker
- 运行 minikube 启动 终端命令