问题描述
在使用 Kubernetes 集群中的 Helm 进行操作时,遇到了 “Error: forwarding ports: Upgrade request required” 错误。用户的集群是使用 kubespray 构建的,并导入到 Rancher 中。集群节点配置如下:
– 操作系统:CentOS Linux 7 3.10.0-957.12.1.el7.x86_64
– Docker 版本:18.9.5
– Kubelet 版本:v1.14.1
– Tiller 版本:v2.14.1 (从 Tiller Pod 的镜像 “gcr.io/kubernetes-helm/tiller:v2.14.1” 中获取)
Tiller 的所有资源都正常工作。当用户运行 helm 命令时,出现以下错误信息:
$ helm version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Error: forwarding ports: error upgrading connection: Upgrade request required
$ helm ls
Error: forwarding ports: error upgrading connection: Upgrade request required
用户尝试过将 Helm 客户端版本从 2.11.0 升级到 2.14.1,但问题仍未解决。用户寻求帮助解决这个错误。
解决方案
以下是两种可能的解决方案,你可以根据具体情况选择其中之一。
方案1:使用本地 Tiller 二进制文件
- 获取 Tiller(Helm 的服务端组件)的本地二进制文件,你可以通过编译或从发布页面下载获得。
- 在命令行中设置
HELM_HOST
环境变量,将其指向 Tiller 的监听地址和端口(默认为:44134
)。 - 运行本地 Tiller 二进制文件,并将输出重定向到
/dev/null
,以在后台运行。 - 尝试运行之前的 Helm 命令,此时它将连接到本地运行的 Tiller。
下面是具体的操作步骤示例:
# 获取本地 Tiller 二进制文件
# 编译或从发布页面下载 Tiller 二进制文件,并将其放置在可执行文件路径下
# 设置 HELM_HOST 环境变量
export HELM_HOST=":44134"
# 运行本地 Tiller
tiller -listen ${HELM_HOST} -alsologtostderr >/dev/null 2>&1 &
# 尝试运行 Helm 命令
helm version
helm ls
通过上述操作,你可以在本地运行一个 Kubernetes Helm 服务器,从而解决 “Error: forwarding ports: Upgrade request required” 错误。
方案2:参考 Github 解决方案
- 在 GitHub 的 Helm 仓库中,找到一个相关的评论提供了解决方案。
- 根据该解决方案,使用 Tiller 的本地二进制文件运行一个本地的 Kubernetes Helm 服务器。
- 尝试运行之前的 Helm 命令,它将连接到本地运行的 Tiller。
下面是一个示例解决方案,其中涉及到在本地运行 Tiller 服务器的步骤:
Ran into this today when trying to use Garden.io for a cluster running in Jelastic.
Found the solution in this Github comment:
First acquire a local binary for Tiller (server-version of Helm), either by compiling or by downloading it from the release page.
Then run:
$ export HELM_HOST=":44134"
$ tiller -listen ${HELM_HOST} -alsologtostderr >/dev/null 2>&1 &
This will run a local version of the Kubernetes Helm Server. Now try your original command again, kubectl, that will delegate to this local Helm instead and manage to connect.
上述方案中,你需要根据具体情况获取本地 Tiller 二进制文件,并运行一个本地 Kubernetes Helm 服务器。
总结
如果你遇到 “Error: forwarding ports: Upgrade request required” 错误,可以根据上述两种方案之一来解决。通过使用本地 Tiller 二进制文件,你可以在本地运行一个 Helm 服务器,从而绕过该错误并正常进行操作。同时,你也可以参考 GitHub 上的相关评论提供的解决方案来解决这个问题。无论选择哪种方案,都能帮助你成功解决这一错误,继续使用 Helm 进行操作。