Helm: Pengguna "system: serviceaccount: kube-system: default" tidak bisa mendapatkan namespace di namespace "default"

Dibuat pada 12 Nov 2017  ·  30Komentar  ·  Sumber: helm/helm

Saat memasang paket helm, saya mendapat error berikut seperti ini:

[root@k8s-master3 ~]# helm install --name nginx stable/nginx-ingress
Error: release nginx failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Ini adalah versi helm saya:

[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}

Dan versi kubectl saya:

[root@k8s-master3 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.1-alicloud", GitCommit:"19408ab2a1b736fe97a9d9cf24c6fb228f23f12f", GitTreeState:"clean", BuildDate:"2017-10-19T04:05:24Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-11T23:16:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

Bantuan apa pun akan dihargai, terima kasih banyak!

questiosupport

Komentar yang paling membantu

Itu karena Anda tidak memiliki izin untuk menyebarkan anakan, tambahkan akun untuk itu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Keluaran konsol:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Kemudian jalankan perintah di bawah ini untuk memeriksanya:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

Semua 30 komentar

Tampaknya Anda mengalami masalah terkait hak istimewa.
Anda dapat mengaktifkan rbac di saat menerapkan bagan:

$ helm install --name nginx --set rbac.create=true stable/nginx-ingress

@ pamflet3

Ini masih tidak bisa bekerja.
image

Masalah yang sama disini. Mengaktifkan rbac tidak membantu.

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.3", GitCommit:"f0efb3cb883751c5ffdbe6d515f3cb4fbe7b7acd", GitTreeState:"clean", BuildDate:"2017-11-10T13:17:12Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.2", GitCommit:"bdaeafa71f6c7c04636251031f93464384d54963", GitTreeState:"clean", BuildDate:"2017-10-24T19:38:10Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

$ helm install --name my-hdfs-namenode hdfs-namenode-k8s
Error: release my-hdfs-namenode failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Bantuan akan sangat dihargai!

Yang perlu Anda lakukan adalah memberikan akses kepada tiller (melalui akun layanan default) untuk menginstal sumber daya di namespace default. Lihat https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Hai, @bacongobbler
Terimakasih atas bantuannya. Saya mengikuti instruksi Anda yang disebutkan di atas, dan saya telah melakukan hal-hal berikut:
Pertama-tama, saya mengatur ulang anakan:

helm reset --force

Setelah melakukan ini, saya membuat file yaml RBAC:

[root@k8s-master3 ~]# cat rbac-config.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: default

Dan kemudian init anakan saya:

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.7.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

Namun, anakan tidak berhasil dipasang:

[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Error: cannot connect to Tiller

Dan saya menjahit penerapan di namespace kube-system seperti ini:

[root@k8s-master3 ~]# kubectl get deployments --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
ci            jenkins                    1         1         1            1           5d
default       redis-master               1         1         1            0           4d
kube-system   default-http-backend       1         1         1            1           5d
kube-system   heapster                   1         1         1            1           5d
kube-system   kube-dns                   1         1         1            1           5d
kube-system   kubernetes-dashboard       1         1         1            1           5d
kube-system   monitoring-influxdb        1         1         1            1           5d
kube-system   nginx-ingress-controller   1         1         1            1           5d
kube-system   tiller-deploy              1         0         0            0           9m

Ada ide tentang bagaimana mengatasi masalah ini?
Terima kasih sebelumnya!

@noprom coba ini

hapus penyebaran anakan secara manual

buat konfigurasi rbac ini untuk anakan

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

jalankan delete (yes delete) pada konfigurasi rbac itu
jalankan buat lagi
kemudian jalankan helm init --upgrade untuk mengganti

Anda seharusnya tidak memiliki kesalahan lagi.

@innovia
Bagus! Terima kasih, saya telah menyelesaikan masalah ini.
Terima kasih banyak!

Senang bisa membantu :)

@noprom silakan periksa posting saya tentang cara mengatur helm dan anakan dengan rbac per namespace

@innovia
Pos yang fantastis! 😄

Terima kasih!

di atas tidak berhasil Masih mendapatkan

namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Itu karena Anda tidak memiliki izin untuk menyebarkan anakan, tambahkan akun untuk itu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Keluaran konsol:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Kemudian jalankan perintah di bawah ini untuk memeriksanya:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

@ykfq Terima kasih banyak, berhasil! Tetapi setiap kali, kami menerapkan pada cluster baru, kami perlu melakukan ini? Benar-benar merepotkan!

@ antran89
Jika Anda menggunakan instruksi pemasangan anakan resmi, Anda harus melakukannya:

  • Buat akun layanan untuk anakan
  • Ikat peran untuk ServiceAccout yang dibuat di atas (peran admin cluster diperlukan)
  • Buat ClusterRoleBinding untuk ServiceAccout
  • Tambal penerapan yang dibuat saat menggunakan helm init

Nah, ada cara lain untuk membuatnya lebih mudah - install via file yaml:

vim tiller.yaml

apiVersion: v1
kind: Service
metadata:
  name: tiller-deploy
  namespace: kube-system
  labels:
    app: helm
    name: tiller
spec:
  ports:
  - name: tiller
    port: 44134
    protocol: TCP
    targetPort: tiller
  selector:
    app: helm
    name: tiller
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tiller-deploy
  namespace: kube-system
  labels:
    app: helm
    name: tiller
  annotations:
    deployment.kubernetes.io/revision: "5"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helm
      name: tiller
  template:
    metadata:
      labels:
        app: helm
        name: tiller
    spec:
      containers:
      - env:
        - name: TILLER_NAMESPACE
          value: kube-system
        - name: TILLER_HISTORY_MAX
          value: "0"
        name: tiller
        image: gcr.io/kubernetes-helm/tiller:v2.8.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 44134
          name: tiller
          protocol: TCP
        - containerPort: 44135
          name: http
          protocol: TCP
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /liveness
            port: 44135
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readiness
            port: 44135
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      serviceAccount: tiller
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-cluster-rule
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

Kemudian buat sumber:

kubectl create -f tiller.yaml

Pastikan untuk memeriksa layanan Anda.

konten yaml di atas diekspor dari cluster yang sedang berjalan, menggunakan perintah:

kubectl -n kube-system get svc tiller-deploy -o=yaml
kubectl -n kube-system get deploy tiller-deploy -o=yaml
kubectl -n kube-system get sa tiller -o=yaml
kubectl -n kube-system get clusterrolebinding tiller-cluster-rule -o=yaml

Yaml ini belum diuji, jika ada pertanyaan, beri komentar.

@ykfq Saya tidak suka ide memberikan hak istimewa admin cluster penuh Tiller, tetapi tidak ada yang berhasil untuk saya. Saya mencoba mengikuti contoh ini. Saya mencoba membatasi Tiller untuk bertindak hanya pada ruang nama, saya membiarkannya bertindak.

Tetapi selalu mengalami masalah ini (sedang menerapkan Concourse):

Error: release concourse failed: namespaces "concourse" is forbidden: User "system:serviceaccount:tiller-system:tiller-user" cannot get namespaces in the namespace "concourse": Unknown user "system:serviceaccount:tiller-system:tiller-user"

Adakah ide tentang bagaimana membuat contoh spesifik itu bekerja? Saya mengubah beberapa parameter di sekitar, seluruh YAML dengan RBAC adalah yang ini:

apiVersion: v1
kind: Namespace
metadata:
  name: tiller-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller-user
  namespace: tiller-system
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-manager
  namespace: tiller-system
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["configmaps"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-binding
  namespace: tiller-system
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: concourse
---
apiVersion: v1
kind: Namespace
metadata:
  name: concourse-main
----
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-role
  namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-namespace-role
  namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["namespaces"]
  verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-main-role
  namespace: concourse-main
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-main-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-main-role
  apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-role
  apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-namespace-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-namespace-role
  apiGroup: rbac.authorization.k8s.io

helm init --upgrade --service-account tiller

@brunoban helm v3 akan menghapus anakan jadi dari apa yang saya pahami izinnya adalah oleh pengguna yang menerapkannya

@innovia Oh ... Saya tidak tahu itu. Akan mencoba untuk mempercepat sekarang. Terima kasih!

kemudian jalankan helm init --upgrade untuk mengganti

@innovia Di mana harus meletakkan file konfigurasi rbac?

@cjbottaro apakah Anda membaca posting yang saya tulis Hwo untuk mengatur helm dan anakan per namespace ?

Saya tidak mengikuti pertanyaan Anda, dapatkah Anda menjelaskan kembali?

@innovia Nevermind, saya menemukan

kubectl create -f tiller.yaml
helm init --upgrade --service-account tiller

ini berhasil untuk saya:

kubectl --namespace kube-system membuat layanan akun tiller
kubectl buat clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount = kube- system: tiller
helm init --service-account tiller --upgrade

Saya mengikuti dokumentasi Helm resmi untuk "Menyebarkan Tiller di namespace, dibatasi untuk menerapkan sumber daya hanya di namespace itu". Ini skrip bash saya:

Namespace="$1"

kubectl create namespace $Namespace
kubectl create serviceaccount "tiller-$Namespace" --namespace $Namespace
kubectl create role "tiller-role-$Namespace" /
    --namespace $Namespace /
    --verb=* /
    --resource=*.,*.apps,*.batch,*.extensions
kubectl create rolebinding "tiller-rolebinding-$Namespace" /
    --namespace $Namespace /
    --role="tiller-role-$Namespace" /
    --serviceaccount="$Namespace:tiller-$Namespace"

Menjalankan helm upgrade memberi saya kesalahan berikut:

Kesalahan: UPGRADE GAGAL: configmaps dilarang: Pengguna " system: serviceaccount : kube- system: default " tidak dapat mencantumkan configmaps di namespace "kube-system"

Apakah ada bug di dokumentasi resmi? Apakah saya salah membacanya?

Apa perintah lengkap untuk helm init ? Bisakah Anda membuka tiket terpisah untuk ini?

@bacongobbler Memindahkan masalah ke sini https://github.com/helm/helm/issues/4933

di atas tidak berhasil Masih mendapatkan

namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Ikuti di bawah Perintah: -

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/ tiller: v2.14.0 --stable-repo-url https: //kubernetes.oss-cn-hangzhou.aliyuncs .com / grafik

Yang perlu Anda lakukan adalah memberikan akses kepada tiller (melalui akun layanan default) untuk menginstal sumber daya di namespace default. Lihat https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Nama file sekarang rbac.md dan tautannya ada di https://github.com/helm/helm/blob/master/docs/rbac.md.

Itu karena Anda tidak memiliki izin untuk menyebarkan anakan, tambahkan akun untuk itu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Keluaran konsol:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Kemudian jalankan perintah di bawah ini untuk memeriksanya:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

Akan sangat bagus jika dokumen instalasi anakan diperbarui dengan instruksi yang tepat ini
Saya makan yaml berikut

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: ""
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

Jika saya benar, saya kehilangan tiller deployment di yaml ini?

helm init --upgrade --service-account tiller

Perintah di atas memperbaiki masalah ini, sangat merekomendasikan langkah ini pada awalnya :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

naveensrinivasan picture naveensrinivasan  ·  3Komentar

burnettk picture burnettk  ·  3Komentar

PhilippeDupont picture PhilippeDupont  ·  3Komentar

bq1756 picture bq1756  ·  3Komentar

danielcb picture danielcb  ·  3Komentar