lista do helm: não é possível listar configmaps no namespace “kube-system”

108

Instalei o helm 2.6.2 no cluster do Kubernetes 8. helm initfuncionou bem. mas quando executo helm listdando esse erro.

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

Como corrigir esta mensagem de erro RABC?

sfgroups
fonte

Respostas:

228

Uma vez que estes comandos:

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade

foram executados, o problema foi resolvido.

sfgroups
fonte
10
Observe que isso atribui --clusterrole=cluster-admin, o que certamente corrigirá problemas de permissões, mas pode não ser a correção que você deseja. É melhor criar suas próprias contas de serviço, funções (cluster) e vinculações de funções (cluster) com as permissões exatas de que você precisa.
Curtis Mattoon
2
The accepted answer gives full admin access to Helm which is not the best solution security wise(consulte stackoverflow.com/a/53277281/2777965 ).
030
1
quando executar "init", deve ter "--upgrade", outras questões não mencionam isso.
Heavenwing
Quando eu corro kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}', receboError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick de
36

Resposta mais segura

A resposta aceita dá acesso de administrador total ao Helm, o que não é a melhor solução em termos de segurança. Com um pouco mais de trabalho, podemos restringir o acesso do Helm a um determinado namespace. Mais detalhes na documentação do Helm .

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created

Defina uma função que permita ao Tiller gerenciar todos os recursos tiller-worldem role-tiller.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]

Então corra:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

Em rolebinding-tiller.yaml,

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-binding
  namespace: tiller-world
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: tiller-world
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io

Então corra:

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created

Depois disso, você pode executar helm initpara instalar o Tiller no tiller-worldnamespace.

$ helm init --service-account tiller --tiller-namespace tiller-world

Agora prefixe todos os comandos com --tiller-namespace tiller-worldou defina TILLER_NAMESPACE=tiller-worldem suas variáveis ​​de ambiente.

Mais respostas à prova de futuro

Pare de usar o Tiller. O Helm 3 elimina completamente a necessidade do Leme. Se você estiver usando o Helm 2, poderá usar helm templatepara gerar o yaml a partir do gráfico do Helm e, em seguida, executar kubectl applypara aplicar os objetos ao cluster do Kubernetes.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml
Muhammad Rehan Saeed
fonte
1
Observe que, depois de fazer isso, você precisará prefixar todos os comandos do helm --tiller-namespace tiller-worldou definir TILLER_NAMESPACE=tiller-worldem suas variáveis ​​de ambiente.
spuder
1
Concordo totalmente com a resposta à prova de futuro. O pessoal do leme parece perceber que as coisas do RBAC tornavam as coisas muito complexas para gerenciar. Eles estão apenas em alfa, mas vale a pena dar uma olhada: Helm 3, alfa 1
Richard
1
Concordo, RBAC é um pouco demais para colocar as mãos no início. Ainda estou lutando com isso, mas fazendo progressos.
coreyperkins de
A criação de Volumes Persistentes é a prática aceita pelo leme? Devemos criar também outra função de cluster e ligação para este caso?
Sawyer
20

O Helm é executado com uma conta de serviço "padrão". Você deve fornecer permissões para ele.

Para permissões somente leitura:

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system

Para acesso de administrador: Ex: para instalar pacotes.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
suresh Palemoni
fonte
Depois de correr kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, helm listeu ainda consigo correrError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick de
0
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f your-config-file-name.yaml

e atualize a instalação do helm para usar serviceAccount:

helm init --service-account tiller --upgrade

Elieser Jose Pereira Reyes
fonte
0

Recebi este erro ao tentar instalar o tiller no modo offline. Achei que a conta de serviço 'tiller' não tinha direitos suficientes, mas descobri que uma política de rede estava bloqueando a comunicação entre o tiller e o api-server.

A solução foi criar uma política de rede para o leme permitindo toda a comunicação de saída do leme

Jorge P.
fonte
0

export TILLER_NAMESPACE=<your-tiller-namespace>resolveu para mim, se <your-tiller-namespace>não for kube-system. Isso aponta o cliente Helm para o namespace Tiller certo.

bczoma
fonte
0

Se você estiver usando um cluster EKS da AWS e estiver enfrentando o problema proibido ( por exemplo : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"isso funcionou para mim:

Solução:

  1. Certifique-se de ter configurado AWS
  2. Certifique-se de que o usuário configurado tenha permissão para acessar o cluster.
Kiruthika Kanagarajan
fonte