Helm: Ошибка: ошибка при установке: пользователь "system: anonymous" не может создавать deployments.extensions в пространстве имен "kube-system" .: "Политика не соответствует. \ NНеизвестный пользователь \" system: anonymous \ "" (опубликовать deployments.extensions)

Созданный на 8 июл. 2017  ·  3Комментарии  ·  Источник: helm/helm

Привет,

Иметь

Шлем 2.5.0
Kubernetes 1.6 с включенным RBAC на GCP

Проблема

Запустите эти команды в контейнере с 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, чтобы он мог устанавливать объекты, запрошенные вашими диаграммами. Лучше всего создать новую учетную запись службы для Tiller в том же пространстве имен, в котором работает его под (в вашем случае «kube-system»), а затем либо создать _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

Затем добавил этого пользователя сервиса в спецификацию Тиллера.

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

Затем изменил список команд для аутентификации в k8s в моем манифесте конвейера.

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 и токен пользователя tiller.

Используйте эту команду для получения 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

Обратите внимание, что _helm init_ учитывает флаг --service-account при фиксации 64e9e471838ac44e551c32abcbd19f671c80ecce.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги