dümen listesi: "kube-system" ad alanında yapılandırma eşlemeleri listelenemez


108

Kubernetes 8 kümesine dümen 2.6.2'yi kurdum. helm initiyi çalıştı. ama çalıştırdığımda helm listbu hatayı veriyor.

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

Bu RABC hata mesajı nasıl düzeltilir?

Yanıtlar:


228

Bu komutlardan sonra:

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

çalıştırıldı, sorun çözüldü.


10
Bu atamaların --clusterrole=cluster-adminizin sorunlarını kesinlikle çözeceğini, ancak istediğiniz düzeltme olmayabileceğini unutmayın. İhtiyacınız olan tam izinlerle kendi hizmet hesaplarınızı, (küme) rollerinizi ve (küme) rol bağlantılarınızı oluşturmanız daha iyidir.
Curtis Mattoon

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

1
"init" çalıştırıldığında, "--upgrade" olmalıdır, diğer sorular bundan bahsetmez.
heavenwing

Ben çalıştırdığınızda kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'alıyorumError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Daha Güvenli Cevap

Kabul edilen yanıt, güvenlik açısından en iyi çözüm olmayan Helm'e tam yönetici erişimi sağlar. Biraz daha çalışarak, Miğfer'in belirli bir ad alanına erişimini kısıtlayabiliriz. Dümen belgelerinde daha fazla ayrıntı .

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

Tiller'ın tüm kaynakları aşağıdaki tiller-worldgibi yönetmesine izin veren bir Rol tanımlayın 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: ["*"]

O zaman koş:

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

İçinde 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

O zaman koş:

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

Daha sonra helm initTiller'ı tiller-worldad alanına kurmak için çalıştırabilirsiniz .

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

Şimdi tüm komutların önüne , ortam değişkenlerinizde yer alan --tiller-namespace tiller-worldveya bunları TILLER_NAMESPACE=tiller-worldekleyin.

Daha Gelecekte Kanıtlanmış Cevap

Tiller'ı kullanmayı bırakın. Miğfer 3, Tiller ihtiyacını tamamen ortadan kaldırır. Helm 2 kullanıyorsanız helm template, Helm grafiğinizden yaml oluşturmak için kullanabilir ve ardından kubectl applynesneleri Kubernetes kümenize uygulamak için çalıştırabilirsiniz .

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

1
Not, bunu yaptıktan sonra, tüm dümen komutlarının önüne ortam değişkenlerinizi koymanız --tiller-namespace tiller-worldveya bunları ayarlamanız gerekecektir TILLER_NAMESPACE=tiller-world.
spuder

1
Gelecekteki kanıtı cevaba tamamen katılıyorum. Dümen milleti, RBAC malzemesinin işleri yönetilemeyecek kadar karmaşık hale getirdiğinin farkında görünüyor. Sadece alfa seviyesindeler, ancak bir göz atmaya değer: Miğfer 3, alfa 1
Richard

1
Kabul edildi, RBAC ilk başta elinize almak için biraz fazla. Hala bununla mücadele ediyorum ama ilerleme kaydediyorum.
coreyperkins

Persistent Volumes, dümen tarafından kabul edilen bir uygulama mı? Bu durum için başka bir küme rolü ve bağlayıcılığı da yaratmalı mıyız?
Sawyer

20

Helm, "varsayılan" hizmet hesabıyla çalışır. Ona izin vermelisiniz.

Salt okunur izinler için:

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

Yönetici erişimi için: Örn: paketleri kurmak için.

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

Çalıştırdıktan sonra kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:defaultsonra ve koşmak helm listhala olsunError: 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

ve ardından dümen kurulumunu serviceAccount kullanmak için güncelleyin:

helm init --service-account tiller --upgrade


0

Çevrimdışı modda dümen kurmaya çalışırken bu hatayı aldım, 'tiller' hizmet hesabının yeterli haklara sahip olmadığını düşündüm, ancak bir ağ politikasının tiller ile api sunucusu arasındaki iletişimi engellediği ortaya çıktı.

Çözüm, yeke için tüm çıkış iletişimine izin veren bir ağ politikası oluşturmaktı


0

export TILLER_NAMESPACE=<your-tiller-namespace>eğer benim için çözülmüş <your-tiller-namespace>değildir kube-system. Bu, Helm istemcisini doğru Tiller ad alanına işaret eder.


0

AWS'den bir EKS kümesi kullanıyorsanız ve yasak bir sorunla karşı karşıyaysanız ( örneğin : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"bu benim için çalıştı:

Çözüm:

  1. AWS'yi yapılandırdığınızdan emin olun
  2. Yapılandırılmış kullanıcının kümeye erişim iznine sahip olduğundan emin olun.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.