Helm: Fehler: Fehler beim Installieren: Benutzer "system: anonym" kann keine deployments.extensions im Namespace "kube-system" erstellen.: "Keine Richtlinie übereinstimmt. \ NUnbekannter Benutzer \" system: anonym \ "" (post deployments.extensions)

Erstellt am 8. Juli 2017  ·  3Kommentare  ·  Quelle: helm/helm

Hallo,

Haben

Helm 2.5.0
Kubernetes 1.6 mit aktiviertem RBAC auf GCP

Problem

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)

Frage

Was kann ich tun, um diesen Fehler zu beheben?

questiosupport

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen