Oi,
Helm 2.5.0
Kubernetes 1.6 com RBAC ativado no GCP
Execute estes comandos no contêiner com kubectl e 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)
O que devo fazer para corrigir esse erro?
Você precisará vincular permissões suficientes à conta de serviço do pod do Tiller para que ele possa instalar os objetos solicitados pelos seus gráficos. O melhor é criar uma nova conta de serviço para o Tiller no mesmo namespace em que seu pod é executado (no seu caso, "kube-system") e, em seguida, criar um _Role_ nos namespaces nos quais você pretende instalar gráficos ou um _ClusterRole_ se você deseja compartilhar a definição entre vários namespaces e, em seguida, crie os objetos _RoleBinding_ ou _ClusterRoleBinding_ para conceder essas permissões à conta de serviço específica do Tiller mencionada anteriormente.
Eu criei o manifesto com conta de serviço e definição de 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
Em seguida, adicionou este usuário de serviço à especificação do Tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
Em seguida, alterei a lista de comandos para auth em k8s em meu manifesto 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
e $USER_TOKEN
- são as variáveis secretas que salvam os dados ca.crt e o token do usuário Tiller.
Use estes comandos para obter ca.crt e 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
Observe que _helm init_ honra um sinalizador --service-account
partir do commit 64e9e471838ac44e551c32abcbd19f671c80ecce.