Helm: Erreur: erreur lors de l'installation: l'utilisateur "système: anonyme" ne peut pas créer des déploiements.extensions dans l'espace de noms "kube-system".

Créé le 8 juil. 2017  ·  3Commentaires  ·  Source: helm/helm

Salut,

Avoir

Heaume 2.5.0
Kubernetes 1.6 avec RBAC activé sur GCP

Problème

Exécutez ces commandes dans un conteneur avec kubectl et 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)

Question

Que dois-je faire pour corriger cette erreur?

questiosupport

Tous les 3 commentaires

Vous devrez lier des autorisations suffisantes au compte de service du pod Tiller pour qu'il puisse installer les objets demandés par vos graphiques. Le mieux est de créer un nouveau compte de service pour Tiller dans le même espace de noms dans lequel son pod s'exécute (dans votre cas, "kube-system"), puis de créer un _Role_ dans les espaces de noms dans lesquels vous avez l'intention d'installer des graphiques ou un _ClusterRole_ si vous souhaitez partager la définition sur plusieurs espaces de noms, puis créez des objets _RoleBinding_ ou _ClusterRoleBinding_ pour accorder ces autorisations au compte de service spécifique à Tiller susmentionné.

J'ai créé un manifeste avec le compte de service et la définition 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

Puis ajouté cet utilisateur de service à la spécification de Tiller

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

Ensuite, j'ai changé la liste de commandes pour l'authentification dans k8s dans mon manifeste de pipeline.

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 et $USER_TOKEN - sont les variables secrètes qui sauvegardent les données ca.crt et le jeton utilisateur de la barre.

Utilisez ces commandes pour obtenir ca.crt et 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

Notez que _helm init_ honore un drapeau --service-account partir du commit 64e9e471838ac44e551c32abcbd19f671c80ecce.

Cette page vous a été utile?
0 / 5 - 0 notes