Hai,
Helm 2.5.0
Kubernetes 1.6 dengan RBAC yang diaktifkan di GCP
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)
Apa yang mungkin saya lakukan untuk memperbaiki kesalahan ini?
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.