helm list: no se pueden enumerar los configmaps en el espacio de nombres "kube-system"

108

He instalado helm 2.6.2 en el clúster de kubernetes 8. helm initfuncionó bien. pero cuando lo ejecuto helm listdando este error.

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

¿Cómo solucionar este mensaje de error de RABC?

sfgroups
fuente

Respuestas:

228

Una vez que estos 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

se ejecutaron, el problema se ha resuelto.

sfgroups
fuente
10
Tenga en cuenta que esto asigna --clusterrole=cluster-admin, lo que sin duda solucionará los problemas de permisos, pero puede que no sea la solución que desea. Es mejor crear sus propias cuentas de servicio, roles (clúster) y enlaces de roles (clúster) con los permisos exactos que necesita.
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
cuando se ejecuta "init", debe tener "--upgrade", otras preguntas no lo mencionan.
Heavenwing
Cuando corro kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'consigoError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick
36

Respuesta más segura

La respuesta aceptada brinda acceso de administrador completo a Helm, que no es la mejor solución en cuanto a seguridad. Con un poco más de trabajo, podemos restringir el acceso de Helm a un espacio de nombres en particular. Más detalles en la documentación de Helm .

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

Defina un rol que le permita a Tiller administrar todos los recursos tiller-worldcomo en 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: ["*"]

Entonces corre:

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

en 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

Entonces corre:

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

Luego, puede ejecutar helm initpara instalar Tiller en el tiller-worldespacio de nombres.

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

Ahora prefija todos los comandos con --tiller-namespace tiller-worldo establezca TILLER_NAMESPACE=tiller-worlden sus variables de entorno.

Más respuesta a prueba de futuro

Deja de usar Tiller. Helm 3 elimina por completo la necesidad de Tiller. Si está usando Helm 2, puede usarlo helm templatepara generar el yaml desde su gráfico de Helm y luego ejecutarlo kubectl applypara aplicar los objetos a su clúster de Kubernetes.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml
Muhammad Rehan Saeed
fuente
1
Tenga en cuenta que, una vez que haga esto, deberá anteponer todos los comandos de helm con --tiller-namespace tiller-worldo establecer TILLER_NAMESPACE=tiller-worlden sus variables de entorno.
spuder
1
Totalmente de acuerdo con la respuesta a prueba de futuro. La gente del timón parece darse cuenta de que las cosas de RBAC hacen que las cosas sean demasiado complejas de administrar. Solo están en alfa, pero vale la pena echarles un vistazo: Helm 3, alpha 1
Richard
1
De acuerdo, RBAC es un poco complicado al principio. Todavía estoy luchando con eso, pero estoy progresando.
coreyperkins
¿Es la creación de Persistent Volumes la práctica aceptada por Helm? ¿Deberíamos crear también otro rol de clúster y enlace para este caso?
Sawyer
20

Helm se ejecuta con una cuenta de servicio "predeterminada". Debe proporcionarle permisos.

Para permisos de solo lectura:

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

Para acceso de administrador: Ej .: para instalar paquetes.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
suresh Palemoni
fuente
Después de correr kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, y luego correr helm list, todavía obtengoError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick
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

y luego actualice la instalación del timón para usar serviceAccount:

helm init --service-account tiller --upgrade

Elieser José Pereira Reyes
fuente
0

Recibí este error al intentar instalar tiller en modo fuera de línea, pensé que la cuenta de servicio 'tiller' no tenía suficientes derechos, pero resulta que una política de red estaba bloqueando la comunicación entre tiller y el api-server.

La solución fue crear una política de red para el timón que permitiera todas las comunicaciones de salida del timón.

Jorge P.
fuente
0

export TILLER_NAMESPACE=<your-tiller-namespace>Me lo resolvió, si <your-tiller-namespace>no es así kube-system. Esto apunta al cliente de Helm al espacio de nombres correcto de Tiller.

bczoma
fuente
0

Si está utilizando un clúster EKS de AWS y se enfrentan a la cuestión prohibido ( por ejemplo : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"a continuación, esto funcionó para mí:

Solución:

  1. Asegúrese de haber configurado AWS
  2. Asegúrese de que el usuario configurado tenga permiso para acceder al clúster.
Kiruthika kanagarajan
fuente