Salut,
Heaume 2.5.0
Kubernetes 1.6 avec RBAC activé sur GCP
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)
Que dois-je faire pour corriger cette erreur?
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.