首页 > 解决方案 > Gitlab 安装的 Helm:错误:超出上下文截止日期

问题描述

我在 AWS 中安装了一个带有 Kops 的 Kubernetes 集群。我已经用 Gitlab UI 安装了 Helm Tiller。Tiller 服务似乎是通过 Gitlab 工作的,例如我从 Gitlab UI 安装了 Ingress。

但是当尝试从我的 CLI 中使用相同的 Tiller 时,我无法让它工作。当我helm init说它已经安装时(这完全有道理):

helm init --tiller-namespace gitlab-managed-apps --service-account tiller
$HELM_HOME has been configured at C:\Users\danie\.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)
Happy Helming!

但是,例如,当尝试列出图表时,需要 5 分钟然后超时:

$ helm list --tiller-namespace gitlab-managed-apps --debug
[debug] Created tunnel using local port: '60471'

[debug] SERVER: "127.0.0.1:60471"

Error: context deadline exceeded

我缺少什么,所以我可以从我的 CLI 中使用 Gitlab 安装的 Tiller?

标签: kubernetesgitlabkubernetes-helmkops

解决方案


您确定您的 Tiller 服务器安装在“gitlab-managed-apps”命名空间中吗?默认情况下,它按照 GitLab 网站上的官方安装说明安装到“kube-system”之一,这意味着这是导致您的helm ls命令失败的原因(跳过它)

验证它的最佳方法是通过:

kubectl get deploy/tiller-deploy -n gitlab-managed-apps

您在该命名空间中看到任何与分蘖相关的部署对象吗?

假设您可以使用当前的 kube 上下文操作您的 KOPS 集群,那么在本地运行 helm 客户端应该没有问题。您始终可以--kube-context在 helm 命令中显式使用参数。

更新:

我想我知道是什么导致了您的问题,通过 GitLab UI 安装的 Helm 在 helm 和 tiller 之间使用安全连接 (SSL)(此处为证明)。

知道了这一点,这意味着您应该从安装在 Tiller Pod 上的 Secret 对象中检索一组证书:

#The CA
ca.cert.pem
ca.key.pem
#The Helm client files
helm.cert.pem
helm.key.pem
#The Tiller server files
tiller.cert.pem
tiller.key.pem

然后使用以下命令将 helm 客户端连接到分蘖服务器,如下所述

helm ls --tls --tls-ca-cert ca.cert.pem --tls-cert helm.cert.pem --tls-key helm.key.pem

推荐阅读