Helm: Kesalahan: kesalahan menginstal: Pengguna "sistem: anonim" tidak dapat membuat penyebaran. Ekstensi di ruang nama "kube-system" .: "Tidak ada kebijakan yang cocok. \ NPengguna tidak dikenal \" sistem: anonim \ "" (posting penyebaran.extensions)

Dibuat pada 8 Jul 2017  ·  3Komentar  ·  Sumber: helm/helm

Hai,

Memiliki

Helm 2.5.0
Kubernetes 1.6 dengan RBAC yang diaktifkan di GCP

Masalah

Jalankan perintah ini dalam container dengan kubectl dan helm:

$ kubectl config set-credentials $K8S_USER --username=$K8S_USER --password=$K8S_PASS
$ kubectl config set-cluster test-cluster  --server=https://$K8S_SERVER --insecure-skip-tls- verify=$K8S_INSECURE_SKIP_TLS_VERIFY 
$ kubectl config set-context default-context --cluster=$K8S_CLUSTER_NAME --user=$K8S_USER 
$ kubectl config use-context default-context
$ kubectl cluster-info
Kubernetes master is running at https://****

$ helm init
$HELM_HOME has been configured at /config/.helm.
Error: error installing: User "system:anonymous" cannot create deployments.extensions in the namespace "kube-system".: "No policy matched.\nUnknown user \"system:anonymous\"" (post deployments.extensions)

Pertanyaan

Apa yang mungkin saya lakukan untuk memperbaiki kesalahan ini?

questiosupport

Semua 3 komentar

Anda perlu mengikatkan izin yang memadai ke akun layanan pod Tiller agar dapat menginstal objek yang diminta oleh diagram Anda. Yang terbaik adalah membuat akun layanan baru untuk Tiller di namespace yang sama tempat podnya berjalan (dalam kasus Anda, "kube-system"), lalu buat _Role_ di namespace tempat Anda ingin menginstal diagram atau _ClusterRole_ if Anda ingin membagikan definisi di beberapa namespace, lalu buat objek _RoleBinding_ atau _ClusterRoleBinding_ untuk memberikan izin ini ke akun layanan khusus Tiller yang disebutkan di atas.

Saya membuat manifes dengan akun layanan dan definisi ClusterRoleBinding

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
secrets:
  - tiller-secret
---
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: kube-system

Kemudian menambahkan pengguna layanan ini ke spesifikasi Tiller

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

Kemudian mengubah daftar perintah untuk autentikasi di k8s di manifes pipeline saya.

begin_script:
  - echo "$CA" > /ca.crt
  - kubectl config set-cluster k8s-cluster --embed-certs=true --server=https://$K8S_SERVER --certificate-authority=/ca.crt
  - kubectl config set-credentials tiller --token=$USER_TOKEN
  - kubectl config set-context k8s-cluster --cluster=k8s-cluster --user=tiller
  - kubectl config use-context k8s-cluster 

$CA dan $USER_TOKEN - adalah variabel rahasia yang menyimpan data ca.crt dan token pengguna anakan.

Gunakan perintah ini untuk mendapatkan ca.crt dan user_token:

$ secret=$(kubectl get sa tiller -o json --namaspace=kube-system | jq -r .secrets[].name)
$ kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D # $CA
$ kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D # $USER_TOKEN

Perhatikan bahwa _helm init_ menghormati flag --service-account sejak commit 64e9e471838ac44e551c32abcbd19f671c80ecce.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat