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.
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)
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
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
@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
helm init
kubectl -n kube-system edit deploy/tiller-deploy
dan dua baris ataskubectl 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.
Komentar yang paling membantu
Sesuai saran jayunit100, tambahkan peran
cluster-admin
ke akun layanankube-system:default
berfungsi untuk saya, di bawah ini adalah cmd.