错误:Kubernetes 集群无法访问:获取“http://localhost:8080/version?timeout=32s”:拨打 tcp 127.0.0.1:8080:连接:连接被拒绝

问题描述 投票:0回答:9

我正在尝试将我的应用程序部署到 Rancher 管理的 kubernetes 集群 RKE 中。我已经使用 auto devops 在 gitlab 中创建了管道。但是当舵图尝试部署时,我收到此错误。 错误:Kubernetes 集群无法访问:获取“http://localhost:8080/version?timeout=32s”:拨打 tcp 127.0.0.1:8080:连接:连接被拒绝

下面是我的部署脚本:

deploy:
  stage: deploy
  image: cdrx/rancher-gitlab-deploy
  only:
    - master
  script:
    - apk --no-cache add curl
    - curl -L https://get.helm.sh/helm-v3.3.0-rc.1-linux-amd64.tar.gz > helm.tar.gz
    - tar -zxvf helm.tar.gz
    - mv linux-amd64/helm /usr/local/bin/helm
    - helm install mychart ./mychart

有人可以帮我解决这个问题吗

kubernetes kubernetes-helm rancher-rke
9个回答
46
投票

我在 K3s 上安装 rancher 时遇到了同样的问题,设置 KUBECONFIG 有所帮助。

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

27
投票

这个anwser为我解决了这个问题。如果您不像我一样在 microk8s 上运行,请省略前缀

[microk8s] kubectl config view --raw > ~/.kube/config

3
投票

如果以下命令不起作用

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

您可以尝试使用

root
用户安装k3s & helm。


3
投票

我刚刚遇到了同样的问题。所以发生这种情况是因为你不是 root 用户,

sudo su

然后执行导出和所有其他命令

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.7.1

2
投票

这里有一些很好的答案,详细说明了如何解决问题。以下是 O'Reilly 优秀著作《Learning Helm》中的一段话,它深入了解了为什么会发生这种错误:

“使用 Kubernetes 集群 Helm 直接与 Kubernetes API 服务器交互。因此,Helm 需要能够连接到 Kubernetes 集群。 Helm 尝试通过读取 kubectl(主要 Kubernetes 命令行客户端)使用的相同配置文件来自动执行此操作。

Helm 将尝试通过读取环境变量 $KUBECONFIG 来查找此信息。如果未设置,它将在 kubectl 查找的相同默认位置中查找(例如,UNIX、Linux 和 macOS 上的 $HOME/.kube/config)。

您还可以使用环境变量 (HELM_KUBECONTEXT) 和命令行标志 (--kube-context) 覆盖这些设置。您可以通过运行 helm help 查看环境变量和标志的列表。 Helm 维护者建议使用 kubectl 来管理 Kubernetes 凭证,并让 Helm 仅自动检测这些设置。如果您尚未安装 kubectl,最好的起点是官方 Kubernetes 安装文档。”

-Learning Helm,作者:Matt Butcher、Matt Farina 和 Josh Dolitsky (O’Reilly)。版权所有 2021 Matt Butcher,《创新明天》和《血橙》,978-1-492-08365-8。


0
投票

我也有类似的错误。一些背景上下文:我正在使用多个集群,并且错误地手动编辑了

.kube/config
。这导致配置无效,缺少
context.cluster
context.user
参数。我手动填写了这些值,它又起作用了。

修复之前,

config
文件有这样的部分:

contexts:
- context:
    cluster: ""
    user: ""
  name: ""

我将其更新为

contexts:
- context:
    cluster: <NAME-OF-THE-CLUSTER>
    user: <USERNAME>
  name: <CONTEXT-NAME>

为了更新这些值,我使用了

kubectl config get-contexts
中的值(我在终端历史记录中有上述命令的输出,这有助于更新)。


0
投票

如果您的 microk8s 设置在 Windows 11 上运行,并且您从本地 CMD 或 Powershell 控制台调用 Helm,请运行

microk8s kubectl config view --raw > %USERPROFILE%/.kube/config
根据 documentation,将以下条目添加到您的 kube 配置中:

clusters:
- cluster:
    certificate-authority-data: ...
    server: https://127.0.0.1:16443
  name: microk8s-cluster

从 Windows 角度来看,本地主机上没有端口 16443 的侦听器。相反,请使用从以下命令返回的 IP 地址作为您的服务器地址:

microk8s kubectl describe node | FIND "InternalIP"

像这样更新 kube 配置文件后,您的 Helm 调用也应该可以正常工作。


0
投票

我在寻找问题时发现了这个页面:

Kubernetes cluster unreachable
。就我而言,我遇到了错误:

Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "https://37...

结果我只是忘了运行 minikube 集群:)

minikube start

-3
投票

更新舵

helm repo update

检查

kubectl get all

© www.soinside.com 2019 - 2024. All rights reserved.