Helm: system:default tidak cukup untuk helm, tetapi berfungsi untuk kubectl

Dibuat pada 14 Jul 2017  ·  22Komentar  ·  Sumber: helm/helm

MASALAH

Helm melaporkan kurangnya ACL sebagai alasan mengapa ia tidak dapat melakukan list configmaps/pods/etc... Namun, kubeconfig yang digunakannya valid. Ini membingungkan karena menggabungkan kegagalan Tiller dengan kegagalan klien, dan tidak jelas apakah klien helm rusak, atau apakah Tiller rusak.

yaitu log tiller pada dasarnya menunjukkan hal yang sama dengan kegagalan klien.

LARUTAN

Buat klien helm lebih defensif.

  • Operasi klien helm harus gagal dengan cepat, dan jelaskan bahwa mereka gagal karena anakan tidak berfungsi.
  • Kegagalan klien helm harus selalu melaporkan apakah itu kesalahan hilir (tiller) atau apakah itu kesalahan pada klien.
  • Idealnya saya juga ingin tahu mengapa anakan saya gagal, tapi mudah-mudahan saya bisa mengatasinya sendiri :).

RINCIAN

Saya memiliki mesin linux di mana admin mampu membuat daftar pod dan configmaps dan seterusnya:

ubuntu@ip-10-0-22-242:/opt$ kubectl  get configmaps
NAME             DATA      AGE
hub-config       6         2d
special-config   3         2d

menggunakan klien kubectl standar.... Namun, dengan helm, saya mendapatkan kesalahan:

ubuntu@ip-10-0-22-242:/opt$ export KUBECONFIG=/home/ubuntu/kubeconfig
ubuntu@ip-10-0-22-242:/opt$ helm-exec list
Error: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)

Detail versi helm

ubuntu@ip-10-0-22-242:/opt$ helm-exec version
Client: &version.Version{SemVer:"v2.5.0", GitCommit:"012cb0ac1a1b2f888144ef5a67b8dab6c2d45be6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.5.0", GitCommit:"012cb0ac1a1b2f888144ef5a67b8dab6c2d45be6", GitTreeState:"clean"}

Pengguna helm tampaknya benar (admin@kubernetes) tetapi ketika melihat lebih dalam ke tiller:

ubuntu@ip-10-0-22-242:/opt$ kubectl logs tiller-deploy-3703072393-pn7f6 --namespace=kube-system
[main] 2017/07/13 22:50:37 Starting Tiller v2.5.0 (tls=false)
[main] 2017/07/13 22:50:37 GRPC listening on :44134
[main] 2017/07/13 22:50:37 Probes listening on :44135
[main] 2017/07/13 22:50:37 Storage driver is ConfigMap
[storage] 2017/07/14 15:02:51 listing all releases with filter
[storage/driver] 2017/07/14 15:02:51 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
[storage] 2017/07/14 15:03:18 listing all releases with filter
[storage/driver] 2017/07/14 15:03:18 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
[storage] 2017/07/14 15:06:36 listing all releases with filter
[storage/driver] 2017/07/14 15:06:36 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
[storage] 2017/07/14 15:07:25 listing all releases with filter
[storage/driver] 2017/07/14 15:07:25 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
[storage] 2017/07/14 15:07:54 listing all releases with filter
[storage/driver] 2017/07/14 15:07:54 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
[storage] 2017/07/14 15:11:57 listing all releases with filter
[storage/driver] 2017/07/14 15:11:57 list: failed to list: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps)
proposal

Komentar yang paling membantu

Sesuai saran jayunit100, tambahkan peran cluster-admin ke akun layanan kube-system:default berfungsi untuk saya, di bawah ini adalah cmd.

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

Semua 22 komentar

Saya memperbaiki masalah saya - itu terkait dengan menjalankan sesuatu di kube-system. Saya tidak tahu mengapa klien helm saya (menggunakan kubeconfig yang sama dengan kubectl saya) tidak dapat mengakses NS itu, tetapi saya pikir kita harus mencetak peringatan saat menginstal helm w/oa custom namespace.

@jayunit100 dapatkah Anda menjelaskan bagaimana Anda mengatasi masalah ini dengan tepat? dengan menggunakan tiller-deploy di namespace yang berbeda? Saya menggunakan kluster OpenShift dan menyebarkan tiller-deploy di namespace sistem kube secara otomatis.

@shraderdm

  • http://jayunit100.blogspot.com/2017/07/helm-on.html Saya menulis catatan saya di sini. tiller-namespace= dapat mengganti namespace untuk Anda, tetapi kemungkinan besar,
  • jika Anda melihat failed to list erros, maka masalah sebenarnya yang Anda hadapi adalah, secara default, klaster Anda tidak menambahkan akun layanan ke pod yang memungkinkan pod anakan untuk membuat daftar barang.

  • jadi trik sebenarnya adalah Anda harus memastikan ada akun layanan yang sesuai, yang memberikan hak istimewa yang dibutuhkan helm yaitu

roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
  • Satu catatan terakhir: Akun svc di atas mungkin merupakan superset dari apa yang sebenarnya dibutuhkan untuk helm, tetapi itu berfungsi, dan dibagikan kepada saya oleh orang-orang heptio, sebagaimana diperlukan pada beberapa cluster, tergantung pada akun layanan default yang didapat pod diluncurkan dengan /

@jayunit100 Maaf atas keterlambatan dalam menyelesaikan masalah ini. Apakah Anda menganggap proposal awal Anda masih valid setelah menyelesaikan masalah? Kelihatannya sangat bagus dan saya ingin tetap membukanya untuk diskusi sehingga kami dapat menerapkannya nanti

@jayunit100 postingan blog yang bagus! Saya telah menyelesaikannya dengan cara yang sama, tetapi ada beberapa masalah lain yang harus saya selesaikan di OpenShift juga. Itu pada dasarnya bermuara pada masalah yang sama, rbac memblokir akses saya, dan perlu menambahkan cluster-admin ke akun layanan yang menyebarkan tiller. Saya juga menyebarkannya di namespace yang berbeda dan harus menghapus beberapa nodeelectors, dll. (walaupun saya sudah melewati titik itu ketika saya memposting pertanyaan saya di sini). Saya harap proposal Anda lolos, untuk memungkinkan orang lain menyelesaikan masalah ini dengan lebih mudah di masa mendatang. :)

Ya pasti saya berharap begitu. Saya senang untuk membantu menerapkan juga ; mungkin memerlukan beberapa petunjuk tentang cara meningkatkan helm dev/testing . Saya akan memeriksa dokumen terlebih dahulu

Kedengarannya bagus @jayunit100. Beritahu kami jika anda butuh bantuan.

Sesuai saran jayunit100, tambahkan peran cluster-admin ke akun layanan kube-system:default berfungsi untuk saya, di bawah ini adalah cmd.

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

Mengapa Anda menjalankan Tiller dengan akun layanan "default"?

ini terdengar terkait dan kemungkinan akan ditutup melalui dokumentasi yang diusulkan di https://github.com/kubernetes/helm/issues/2962.

@seh Saya menjalankan helm dengan default, seperti yang dikatakan instruksi untuk melakukan "helm init" dan yang saya dapatkan adalah situasi ini, ia menginstal tiller-deploy-xxxx ke dalam namespace kube-system dan saya berasumsi bahwa secara default ia mencoba menggunakan akun layanan default juga.

Saya yakin kita dapat menutup ini sekarang setelah #3094 digabungkan dan tersedia untuk dilihat di https://docs.helm.sh/using_helm/#role -based-access-control. Saya akan menutup ini tetapi beri tahu kami jika ada hal lain yang kami lewatkan. Terima kasih!

Bukankah seharusnya inisialisasi helm secara otomatis mengatur akun ini, karena tidak dapat beroperasi tanpanya, tampaknya aneh bahwa saya juga perlu mengatur akun layanan juga, karena ini merupakan prasyarat agar berfungsi dengan benar?

Akun layanan default seharusnya sudah ada di sana dengan... memakai nuansa ... default. 😎

Apakah ini tidak terjadi? Saya belum pernah mendengar kasus sebelumnya di mana akun layanan default tidak ada di kube-system.

Untuk informasi latar belakang, Helm (dan karena itu anakan) tidak tahu apa itu akun layanan. Mereka hanya membutuhkan satu untuk berbicara dengan server API kubernetes. Ada beberapa kasus penggunaan yang berbeda di lingkungan RBAC, beberapa di antaranya dapat dilihat di docs . Ada juga kebijakan otentikasi lain seperti Kontrol akses berbasis atribut (ABAC) yang tidak terikat dengan peran RBAC sama sekali. Dengan mengingat hal itu, kami memutuskan untuk tidak memasukkan dukungan RBAC langsung ke pengguna helm init dan pigeon-hole ke dalam satu skenario.

ok, jadi itu perlu menjadi bagian dari petunjuk instalasi, di lokasi yang sama di mana helm init dijelaskan, karena ini sebenarnya adalah masalah make atau break untuk instalasi dan bukan opsi lanjutan, secara harfiah hal default kebanyakan dari kita akan harus dilakukan jika kita menjalankan kubernetes 1.8 dengan pengaturan default.

dan itu tidak dijelaskan di mana pun, kecuali halaman terpisah, yang membuat saya percaya ini adalah masalah sampingan, atau topik lanjutan, tetapi ini sangat penting untuk membuatnya berfungsi dalam mode RBAC default kubernetes

@ leejian0612 Terima kasih banyak, saya terjebak selama ~ 3 hari dengan masalah https://github.com/kubernetes/helm/issues/2464#issuecomment -356986809 dan setelah menyelesaikannya saya masuk ke masalah ini yang diselesaikan dengan saran Anda .
Lihat juga https://github.com/kubernetes/helm/issues/2464#issuecomment -381101015
@chrisglass sangat setuju dengan Anda. Itu harus menjadi bagian dari Helm doc, misalnya bagian FAQ.

Saya setuju. Jika seseorang ingin membuat PR dan cc sendiri, saya akan dengan senang hati meninjaunya.

kubectl -n kube-system edit deploy/tiller-deploy

# add these two lines in container (tiller) scope
serviceAccount: admin-user
serviceAccountName: admin-user

Solusi ini lebih aman daripada membuat clusterrolebinding dengan params berikutnya (--clusterrole=cluster-admin --serviceaccount=kube-system:default).

Hai

@shults
Saya sudah mencoba ini tetapi saya masih mendapatkan kesalahan ini:
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"
Apakah ada sesuatu yang saya lewatkan?

@falcocoris

  1. jalankan helm init
  2. kubectl -n kube-system edit deploy/tiller-deploy dan dua baris atas
  3. mulai amati polong anakan kubectl get pods -w | grep tiller ; mereka seharusnya tidak gagal.

Belum beruntung.! dengan yang diatas

menggunakan baris ini memperbaiki pb saya:

# kubectl create clusterrolebinding add-on-cluster-admin \
  --clusterrole=cluster-admin \
  --serviceaccount=kube-system:default
clusterrolebinding "add-on-cluster-admin" created
# helm reset     

Error: error unstalling Tiller: timed out waiting for the condition

Perhatikan kesalahan di bagian akhir, saya tidak yakin perintah ini melakukan apa pun pada akhirnya tetapi berhasil dengan semua ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat