Hallo,
Helm 2.5.0
Kubernetes 1.6 mit aktiviertem RBAC auf GCP
Führen Sie diese Befehle in einem Container mit kubectl und helm aus:
$ 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)
Was kann ich tun, um diesen Fehler zu beheben?
Sie müssen ausreichende Berechtigungen an das Dienstkonto des Tiller-Pods binden, damit es die von Ihren Diagrammen angeforderten Objekte installieren kann. Am besten erstellen Sie ein neues Dienstkonto für Tiller in demselben Namespace, in dem sein Pod ausgeführt wird (in Ihrem Fall "kube-system"), und erstellen dann entweder eine Rolle in den Namespaces, in denen Sie Diagramme installieren möchten, oder eine ClusterRole, wenn Sie möchten die Definition für mehrere Namespaces freigeben und dann entweder _RoleBinding_- oder _ClusterRoleBinding_-Objekte erstellen, um diese Berechtigungen dem oben genannten Pinnen-spezifischen Dienstkonto zu erteilen.
Ich habe ein Manifest mit Dienstkonto und ClusterRoleBinding-Definition erstellt
---
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
Dann fügte dieser Dienstbenutzer der Spezifikation von Tiller hinzu
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
Dann wurde die Befehlsliste für auth in k8s in meinem Pipeline-Manifest geändert.
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
und $USER_TOKEN
- sind die geheimen Variablen, die ca. CRT-Daten und Pinnenbenutzer-Token speichern.
Verwenden Sie diesen Befehl, um ca.crt und user_token abzurufen:
$ 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
Beachten Sie, dass _helm init_ ab Commit 64e9e471838ac44e551c32abcbd19f671c80ecce ein --service-account
-Flag berücksichtigt.