Helm: 错误:安装错误:用户“ system:anonymous”无法在名称空间“ kube-system”中创建Deployments.extensions。

创建于 2017-07-08  ·  3评论  ·  资料来源: helm/helm

你好,

头盔2.5.0
在GCP上启用RBAC的Kubernetes 1.6

问题

在带有kubectl和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)

问题

我应该怎么做才能解决此错误?

questiosupport

所有3条评论

您需要将足够的权限绑定到Tiller pod的服务帐户,以便它能够安装图表所请求的对象。 最好的做法是在运行其pod的同一名称空间(在您的情况下为“ kube-system”)中为Tiller创建一个新的服务帐户,然后在打算将图表安装到其中的名称空间中创建一个_Role_,或者在一个_ClusterRole_中创建一个您想要在多个名称空间之间共享定义,然后创建_RoleBinding_或_ClusterRoleBinding_对象,以将这些权限授予上述特定于Tiller的服务帐户。

我创建了带有服务帐户和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

然后将此服务用户添加到分iller规范中

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

然后在我的管道清单中的k8s中更改了auth的命令列表。

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$USER_TOKEN -是保存ca.crt数据和分er用户令牌的秘密变量。

使用以下命令获取ca.crt和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

请注意,从提交64e9e471838acac44e551c32abcbd19f671c80ecce起,_helm init_会使用--service-account标志。

此页面是否有帮助?
0 / 5 - 0 等级