kubectl apply 命令不起作用,给出连接被拒绝的错误

kubectl apply command does not work, gives connection refused error

当我尝试使用以下设置 pod 网络时

sudo kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

我收到这个错误,请帮忙

unable to recognize "https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused

更新: 与其他问题不同,这似乎不是权限问题

发现是 kubectl 配置不当的问题。

通过对 calico 网络使用以下命令修复了问题(根据您的网络插件插件进行相应更改)

sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后 运行

sudo kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

并相应地遵循其余部分

以下 issue 使我得出结论,即 api 服务器可能不是 运行。

我建议检查主节点kubelet服务的状态

systemctl status kubelet.service 

并检查日志以获取更多信息,以了解 api 服务器为何未 运行 以及如何解决问题

journalctl -xn --unit kubelet.service 

基本上,当你启动 Kubernetes 时,你会在端口 6443 上启动服务,但是上面的命令是在端口 8080 上搜索服务 运行ning。这是因为当你 运行 sudo 时,它运行s 使用来自 sudo 的变量,它没有关于 Kubernetes 运行ning 所在端口的信息,因此它默认为 8080。运行 以下命令作为 root 用户在主节点。

cp -i /etc/kubernetes/admin.conf $HOME/

现在 运行 kubectl apply 命令如下作为 root 用户。

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

我 运行 遇到了同样的问题,不得不对我的 Ansible 脚本进行以下更改:

- name: apply the flannel pod network add-on
  command: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
  become: yes
  become_method: sudo
  become_user: <user>

在 Ansible 剧本执行期间,有一个任务是 运行 上面的 kubectl apply 命令。但是,它是由 root 用户执行的。因此,发生连接被拒绝错误。为了克服这个问题,我更新了 playbook,使用 become 指令将 sudo 添加到我的普通用户帐户中。

这个post解释了它:
https://www.jasonneurohr.com/articles/connection-refused-when-installing-flannel-on-kubernetes

对我来说,问题是我有一个非根用户需要 运行 命令和 运行 工作节点上的 yaml 文件,这个非根用户需要可以无密码登录到工作节点并能够成为 root。 将此非 root 用户配置为无需密码即可通过 ssh 连接到 kubeworker 后,问题已解决。

我在 Google Cloud Platform Cloud Shell 上发出集群命令时收到此错误。

It is discussed here

When you create a cluster using Google Cloud Console or using gcloud from a different computer, your environment's kubeconfig is not updated.

要自动修复 kubeconfig,请使用此 gcloud 命令修复配置:

gcloud container clusters get-credentials my-xyz-cluster --zone=us-central1-a

一旦完成,我就能够毫无错误地发出集群更改。