helm list: nie można wyświetlić listy configmaps w przestrzeni nazw „kube-system”


108

Helm 2.6.2 został zainstalowany w klastrze Kubernetes 8. helm initdziałało dobrze. ale kiedy uruchomię helm listto podając ten błąd.

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

Jak naprawić ten komunikat o błędzie RABC?

Odpowiedzi:


228

Gdy te polecenia:

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

zostały uruchomione, problem został rozwiązany.


10
Zauważ, że to przypisuje --clusterrole=cluster-admin, co z pewnością rozwiąże problemy z uprawnieniami, ale może nie być poprawką, której potrzebujesz. Lepiej jest utworzyć własne konta usług, role (klastra) i powiązania ról (klastra) z dokładnymi uprawnieniami, których potrzebujesz.
Curtis Mattoon,

2
The accepted answer gives full admin access to Helm which is not the best solution security wise(patrz stackoverflow.com/a/53277281/2777965 ).
030

1
po uruchomieniu "init", musi mieć "--upgrade", inne pytania o tym nie wspominają.
niebiańskie skrzydło

Kiedy biegnę kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}', dostajęError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Bardziej bezpieczna odpowiedź

Zaakceptowana odpowiedź daje pełny dostęp administracyjny do Helm, co nie jest najlepszym rozwiązaniem pod względem bezpieczeństwa. Przy odrobinie pracy możemy ograniczyć dostęp Helma do określonej przestrzeni nazw. Więcej szczegółów w dokumentacji Helm .

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

Zdefiniuj rolę, która pozwoli Tillerowi zarządzać wszystkimi zasobami tiller-worldw 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: ["*"]

Następnie uruchomić:

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

W 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

Następnie uruchomić:

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

Następnie możesz uruchomić helm initinstalację Tillera w tiller-worldprzestrzeni nazw.

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

Teraz poprzedzaj wszystkie polecenia zmiennymi środowiskowymi --tiller-namespace tiller-worldlub ustaw je TILLER_NAMESPACE=tiller-worldw nich.

Więcej odpowiedzi na przyszłość

Przestań używać Tillera. Helm 3 całkowicie eliminuje potrzebę używania Rumpla. Jeśli używasz Helm 2, możesz użyć helm templatedo wygenerowania yaml z wykresu Helm, a następnie uruchomić, kubectl applyaby zastosować obiekty do klastra Kubernetes.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml

1
Zauważ, że gdy to zrobisz, będziesz musiał poprzedzić wszystkie polecenia helm zmiennymi środowiskowymi --tiller-namespace tiller-worldlub je ustawić TILLER_NAMESPACE=tiller-world.
spuder

1
Całkowicie zgadzam się z odpowiedzią na przyszłość. Strażnicy zdają się zdawać sobie sprawę, że sprawy RBAC sprawiły, że sprawy były zbyt skomplikowane, aby nimi zarządzać. Są tylko na alfie, ale warto zajrzeć: Helm 3, alfa 1
Richard

1
Zgoda, na początku RBAC jest trochę trudny do zdobycia. Wciąż z tym walczę, ale robię postępy.
coreyperkins

Czy tworzenie Persistent Volumes jest praktyką akceptowaną przez ster? Czy powinniśmy stworzyć także inną rolę klastra i wiążącą dla tego przypadku?
Sawyer

20

Helm działa z „domyślnym” kontem usługi. Powinieneś nadać mu uprawnienia.

Uprawnienia tylko do odczytu:

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

Dostęp administratora: Np .: aby zainstalować pakiety.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

Po uruchomieniu kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, a potem uruchomieniu helm listnadal dostajęError: 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

a następnie zaktualizuj instalację Helm, aby korzystać z serviceAccount:

helm init --service-account tiller --upgrade


0

Otrzymałem ten błąd podczas próby zainstalowania tillera w trybie offline, myślałem, że konto usługi „tiller” nie ma wystarczających uprawnień, ale okazuje się, że polityka sieciowa blokuje komunikację między rumpelem a serwerem api.

Rozwiązaniem było stworzenie polityki sieciowej dla rumpla, która umożliwi całą komunikację wyjściową sterownicy


0

export TILLER_NAMESPACE=<your-tiller-namespace>rozwiązał to dla mnie, jeśli <your-tiller-namespace>nie kube-system. Wskazuje to klientowi Helm na prawą przestrzeń nazw Tiller.


0

Jeśli używasz klastra EKS z AWS i masz do czynienia z niedozwolonym problemem ( np . forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"To zadziałało dla mnie:

Rozwiązanie:

  1. Upewnij się, że skonfigurowałeś AWS
  2. Upewnij się, że skonfigurowany użytkownik ma uprawnienia dostępu do klastra.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.