Helm: 错误:禁止配置映射:用户“system:serviceaccount:kube-system:default”无法在命名空间“kube-system”中的 API 组“”中列出资源“configmaps”

创建于 2018-12-26  ·  16评论  ·  资料来源: helm/helm

我正在尝试关注INSTALLING TILLER ,但遇到以下错误:

$ helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group "" in the namespace "kube-system"
$

helm version的输出:

$ helm version
Client: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e", GitTreeState:"clean"}
$ 

kubectl version的输出:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:39:04Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:31:33Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
$ 

云提供商/平台(AKS、GKE、Minikube 等):

裸机,Linux

可能相关,我也在尝试访问Tiller 和 Role-Based Access Control ,但得到 404。

最有用的评论

不解释解决方法就关闭问题不好:-)
那让我来代替吧。

错误:禁止配置映射:用户“ system:serviceaccount :kube- system:default ”无法列出

首先,给新手一些信息。
在 Kubernetes 中有:

  • 帐户 - 类似于您的 ID。 示例:约翰
  • 角色 - 项目中的某个组允许做某事。 示例:cluster-admin、it-support、...
  • 绑定 - 将帐户加入角色。 “John in it-support” - 是一个绑定。

因此,在我们上面的消息中,我们看到我们的 Tiller 作为在命名空间“kube-system”注册的帐户“默认”。 很可能您没有将他绑定到足够的角色。

现在回到问题。
我们如何跟踪它:

  • 检查您是否有分蘖的特定帐户。 通常它具有相同的名称 - “分蘖”:
    kubectl [--namespace kube-system] get serviceaccount
    如果没有,则创建:
    kubectl [--namespace kube-system] create serviceaccount tiller
  • 检查你是否有角色集群角色(集群角色对新手来说“更好”——它是集群范围的,不像命名空间范围的角色)。 如果这不是生产,您可以使用高权限角色“cluster-admin”:
    kubectl [--namespace kube-system] get clusterrole
    您可以通过以下方式查看角色内容:
    kubectl [--namespace kube-system] get clusterrole cluster-admin -o yaml
  • 检查第一个子句中的帐户“tiller”是否与您认为足够的clusterrole “cluster-admin”绑定:
    kubectl [--namespace kube-system] get clusterrolebinding
    如果很难根据名称弄清楚,您可以简单地创建新的:
    kubectl [--namespace kube-system] create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
  • 最后,当你有了账号、角色以及它们之间的绑定后,你可以检查你是否真的充当了这个账号:
    kubectl [--namespace kube-system] get deploy tiller-deploy -o yaml

我怀疑您的输出将没有设置“serviceAccount”和“serviceAccountName”:

...
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
...

如果是,则添加您希望分蘖使用的帐户:
kubectl [--namespace kube-system] patch deploy tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
(如果您使用 PowerShell,请查看下面来自 @snpdev 的帖子)
现在你重复前面的检查命令,看看有什么不同:

...
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: tiller                     <-- new line
serviceAccountName: tiller          <-- new line
terminationGracePeriodSeconds: 30
...

是的。 类似的东西。

所有16条评论

任何人的新 URL: https ://helm.sh/docs/rbac/#role -based-access-control

不解释解决方法就关闭问题不好:-)
那让我来代替吧。

错误:禁止配置映射:用户“ system:serviceaccount :kube- system:default ”无法列出

首先,给新手一些信息。
在 Kubernetes 中有:

  • 帐户 - 类似于您的 ID。 示例:约翰
  • 角色 - 项目中的某个组允许做某事。 示例:cluster-admin、it-support、...
  • 绑定 - 将帐户加入角色。 “John in it-support” - 是一个绑定。

因此,在我们上面的消息中,我们看到我们的 Tiller 作为在命名空间“kube-system”注册的帐户“默认”。 很可能您没有将他绑定到足够的角色。

现在回到问题。
我们如何跟踪它:

  • 检查您是否有分蘖的特定帐户。 通常它具有相同的名称 - “分蘖”:
    kubectl [--namespace kube-system] get serviceaccount
    如果没有,则创建:
    kubectl [--namespace kube-system] create serviceaccount tiller
  • 检查你是否有角色集群角色(集群角色对新手来说“更好”——它是集群范围的,不像命名空间范围的角色)。 如果这不是生产,您可以使用高权限角色“cluster-admin”:
    kubectl [--namespace kube-system] get clusterrole
    您可以通过以下方式查看角色内容:
    kubectl [--namespace kube-system] get clusterrole cluster-admin -o yaml
  • 检查第一个子句中的帐户“tiller”是否与您认为足够的clusterrole “cluster-admin”绑定:
    kubectl [--namespace kube-system] get clusterrolebinding
    如果很难根据名称弄清楚,您可以简单地创建新的:
    kubectl [--namespace kube-system] create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
  • 最后,当你有了账号、角色以及它们之间的绑定后,你可以检查你是否真的充当了这个账号:
    kubectl [--namespace kube-system] get deploy tiller-deploy -o yaml

我怀疑您的输出将没有设置“serviceAccount”和“serviceAccountName”:

...
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
...

如果是,则添加您希望分蘖使用的帐户:
kubectl [--namespace kube-system] patch deploy tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
(如果您使用 PowerShell,请查看下面来自 @snpdev 的帖子)
现在你重复前面的检查命令,看看有什么不同:

...
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: tiller                     <-- new line
serviceAccountName: tiller          <-- new line
terminationGracePeriodSeconds: 30
...

是的。 类似的东西。

@m-abramovich 解决方案对我有用。

注意:如果使用 Powershell,命令为:

kubectl --namespace kube-system patch deploy tiller-deploy -p '{\"spec\":{\"template\":{\"spec\":{\"serviceAccount\":\"tiller\"}}}}'

和 2 个月和 1/2 您的解释仍然很有帮助,非常感谢您从繁忙的日程中抽出时间来详细和乐于助人。 @m-abramovich 不像@bacongobbler

和 2 个月和 1/2 您的解释仍然很有帮助,非常感谢您从繁忙的日程中抽出时间来详细和乐于助人。 @m-abramovich 不像 @bacongobbler

关闭这个问题的人就是打开它的人。 很明显,他们觉得问题已经解决了。

此外,原始描述要求提供指向基于角色的访问控制文档的正确链接,该文档是在未关闭问题的情况下提供的。

最后, @bacongobbler在 12 月 25 日花时间提供了所需的信息,这对许多人来说是一个重要的节日。 很抱歉@iamaverrick ,但我觉得你的评论很不恰当。

哇。 我什至不记得回答过这个帖子......有一段时间了。

@marckhouzam的假设是正确的:这个问题是在圣诞节打开的。 那天我碰巧和我的家人在一起,但我从 OP 那里看到了这个简短的问题:

可能相关,我也在尝试访问Tiller 和 Role-Based Access Control ,但得到 404。

所以我想我会用正确的链接快速回答,然后回去庆祝圣诞节。 第二天,OP 关闭了这个问题,所以我认为不需要进一步的跟进。

想到我的评论被认为是简洁或无益的,我真的很沮丧。 我并没有试图解决这个问题。 我只是提供上下文,而 OP 试图在假期期间自己找到解决方案。

感谢 @m-abramovich 和@snpdev跟进并为 OP 的问题提供答案。

@iamaverrick在响应问题时提供文档链接并不少见。 这不是没有帮助,而是对我们作为社区投入大量时间的文档的信念。 如果文档不充分,则该人通常会做出回应,这将使响应者有机会提供更多背景信息。 这也让我们意识到文档需要改进。 如果没有用户这样的交互或反馈,文档将不会改进。

从长远来看,更好的文档可以帮助人们,而不是为不相关的错误或功能提出问题。

在另一个层面上, @bacongobbler在假期期间做出的回应令人印象深刻。 请记住,我们都是努力做到最好的人。

伙计们,请放轻松。
我们都是软件开发人员,在生活中拥有相同的价值观。 我们的共同点比你想象的要多得多。 请大家互相尊重。

@marckhouzam不合适? 我的评论没有以任何形式或形式不尊重任何人。 我只是从我的角度陈述了事实。 这条评论是直接提到@bacongobbler的,不是所有投入 2 美分的人。 感谢@bacongobbler在假期粘贴链接。 最初的问题表明他遇到了问题并且需要指导而不是链接。 伙计们,如果您不能接受建设性的批评,那么请不要在这些线程上发布任何内容。 我们都是试图变得更好并提供更好信息的软件开发人员。

我很抱歉没有用更多细节证明我的答案,因为我在我的问题中暗示了答案,然后@bacongobbler确认了我的答案,随后@m-abramovich 发表了很好的评论

我真的很感谢大家的帮助和/或意见,我保证下次我会做得更好!

再一次,我很抱歉造成了这个(我真的没想到会这样......

我的两分钱:当遵循https://helm.sh/docs/intro/quickstart/时,没有提到 RBAC,并且那里的说明导致无法安装分蘖。 谷歌搜索然后在这里导致这个问题。

也许它可以作为“增强快速入门指南以便警告新手注意这个陷阱”重新打开?

在先决条件下有“决定将哪些安全配置应用于您的安装,如果有的话”,但由于我只是在一次性集群上尝试它,“如果有”暗示我不在乎,我不不需要做任何事情。

即使我注意到我需要做某事,也没有指向说明的链接。

我的两分钱:当遵循https://helm.sh/docs/intro/quickstart/时,没有提到 RBAC,并且那里的说明导致无法安装分蘖。 谷歌搜索然后在这里导致这个问题。

也许它可以作为“增强快速入门指南以便警告新手注意这个陷阱”重新打开?

@pohly
帕特里克,我相信这不再相关了。
Helm v3 不使用 Tiller。 所以,也许,这一切现在都一文不值了。

@m-abramovich 谢谢! 您的详细介绍帮助我解决了这个问题。 我非常感谢您花时间写下您的回复。

这个解释太棒了! 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级