daftar helm: tidak dapat membuat daftar configmaps di namespace "kube-system"


108

Saya telah menginstal helm 2.6.2 di kubernetes 8 cluster. helm initbekerja dengan baik. tetapi ketika saya menjalankannya helm listmemberikan kesalahan ini.

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

Bagaimana cara memperbaiki pesan kesalahan RABC ini?

Jawaban:


228

Setelah perintah ini:

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

dijalankan, masalah telah diselesaikan.


10
Perhatikan bahwa ini memberikan --clusterrole=cluster-admin, yang pasti akan memperbaiki masalah izin, tetapi mungkin bukan perbaikan yang Anda inginkan. Lebih baik membuat akun layanan Anda sendiri, peran (cluster), dan rolebindings (cluster) dengan izin tepat yang Anda butuhkan.
Curtis Mattoon

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

1
saat dijalankan "init", harus ada "--upgrade", pertanyaan lain jangan sebutkan.
heavenwing

Ketika saya menjalankan kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'saya mendapatkanError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Jawaban Lebih Aman

Jawaban yang diterima memberikan akses admin penuh ke Helm yang bukan merupakan solusi keamanan terbaik yang bijaksana. Dengan sedikit usaha lagi, kita dapat membatasi akses Helm ke namespace tertentu. Detail selengkapnya ada di dokumentasi Helm .

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

Tentukan Peran yang memungkinkan Tiller untuk mengelola semua sumber daya tiller-worldseperti di 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: ["*"]

Lalu lari:

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

Dalam 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

Lalu lari:

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

Setelah itu Anda dapat menjalankan helm inituntuk menginstal Tiller di tiller-worldnamespace.

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

Sekarang awali semua perintah dengan --tiller-namespace tiller-worldatau setel TILLER_NAMESPACE=tiller-worlddi variabel lingkungan Anda.

Lebih Banyak Jawaban Bukti Masa Depan

Berhenti menggunakan Tiller. Helm 3 menghilangkan kebutuhan Tiller sepenuhnya. Jika Anda menggunakan Helm 2, Anda dapat menggunakan helm templateuntuk menghasilkan yaml dari bagan Helm Anda dan kemudian menjalankan kubectl applyuntuk menerapkan objek ke klaster Kubernetes Anda.

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

1
Catatan, setelah Anda melakukan ini, Anda perlu memberi awalan semua perintah helm dengan --tiller-namespace tiller-worldatau mengatur TILLER_NAMESPACE=tiller-worldvariabel lingkungan Anda.
spuder

1
Setuju dengan jawaban bukti masa depan. Orang-orang helm tampaknya menyadari bahwa hal-hal RBAC membuat hal-hal terlalu rumit untuk dikelola. Mereka hanya dalam tahap alfa, tetapi patut untuk dilihat: Helm 3, alfa 1
Richard

1
Setuju, RBAC sedikit banyak untuk Anda pada awalnya. Saya masih berjuang dengan itu tetapi membuat kemajuan.
coreyperkins

Apakah Persistent Volume menciptakan praktik yang diterima oleh kemudi? Haruskah kita juga membuat peran cluster lain dan mengikat untuk kasus ini?
Sawyer

20

Helm dijalankan dengan akun layanan "default". Anda harus memberikan izin untuk itu.

Untuk izin hanya baca:

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

Untuk akses admin: Misalnya: untuk menginstal paket.

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

Setelah berlari kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, dan kemudian lari helm listsaya masih mendapatkanError: 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

dan kemudian perbarui instalasi helm untuk menggunakan serviceAccount:

helm init --service-account tiller --upgrade


0

Saya mendapat kesalahan ini ketika mencoba menginstal tiller dalam mode offline, saya pikir akun layanan 'tiller' tidak memiliki cukup hak tetapi ternyata ada kebijakan jaringan yang memblokir komunikasi antara tiller dan server-api.

Solusinya adalah membuat kebijakan jaringan untuk anakan yang memungkinkan semua komunikasi keluar dari anakan


0

export TILLER_NAMESPACE=<your-tiller-namespace>memecahkannya untuk saya, jika <your-tiller-namespace>tidak kube-system. Ini mengarahkan klien Helm ke namespace Tiller yang benar.


0

Jika Anda menggunakan klaster EKS dari AWS dan menghadapi masalah terlarang ( misalnya : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"maka ini berhasil untuk saya:

Larutan:

  1. Pastikan Anda telah mengonfigurasi AWS
  2. Pastikan bahwa pengguna yang dikonfigurasi memiliki izin untuk mengakses cluster.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.