helm list: не может отображать конфигурационные карты в пространстве имен «kube-system»


108

Я установил helm 2.6.2 в кластере kubernetes 8. helm initработал нормально. но когда я запускаю helm listего, выдает эту ошибку.

 helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

Как исправить это сообщение об ошибке RABC?

Ответы:


228

После этих команд:

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade

были запущены, проблема решена.


10
Обратите внимание, что это назначение --clusterrole=cluster-admin, которое, безусловно, устранит проблемы с разрешениями, но может быть не тем исправлением, которое вам нужно. Лучше создать свои собственные учетные записи служб, (кластерные) роли и (кластерные) ролевые привязки с точными разрешениями, которые вам нужны.
Curtis Mattoon

2
The accepted answer gives full admin access to Helm which is not the best solution security wise(см. stackoverflow.com/a/53277281/2777965 ).
030

1
при запуске "init" должен быть "--upgrade", в других вопросах это не упоминается.
небесное крыло

Когда я бегу, kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'я получаюError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Более безопасный ответ

Принятый ответ дает полный доступ администратора к Helm, что не является лучшим решением с точки зрения безопасности. Немного поработав, мы можем ограничить доступ Helm к определенному пространству имен. Подробнее в документации Helm .

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created

Определите роль, которая позволяет Tiller управлять всеми ресурсами, tiller-worldнапример role-tiller.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]

Затем запустите:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

В rolebinding-tiller.yaml,

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-binding
  namespace: tiller-world
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: tiller-world
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io

Затем запустите:

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created

После этого вы можете запустить helm initустановку Tiller в tiller-worldпространстве имен.

$ helm init --service-account tiller --tiller-namespace tiller-world

Теперь префикс всех команд с помощью переменных среды --tiller-namespace tiller-worldили установленных TILLER_NAMESPACE=tiller-worldв них.

Более перспективный ответ

Прекратите использовать Tiller. Helm 3 полностью устраняет необходимость в Tiller. Если вы используете Helm 2, вы можете использовать его helm templateдля генерации yaml из вашей диаграммы Helm, а затем запустить, kubectl applyчтобы применить объекты к вашему кластеру Kubernetes.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml

1
Обратите внимание: как только вы это сделаете, вам нужно будет поставить перед всеми командами helm префикс --tiller-namespace tiller-worldили установить TILLER_NAMESPACE=tiller-worldв переменных среды.
spuder

1
Полностью согласен с ответом на будущее. Руководители, кажется, понимают, что материал RBAC слишком усложняет управление. Они только на альфе, но стоит посмотреть: Helm 3, alpha 1
Ричард

1
Согласны, RBAC - это слишком много для начала. Я все еще борюсь с этим, но добиваюсь прогресса.
coreyperkins

Является ли создание постоянных томов практикой принятия штурмом? Должны ли мы создать еще одну роль кластера и привязку для этого случая?
Sawyer

20

Helm работает с учетной записью службы по умолчанию. Вы должны предоставить ему разрешения.

Для разрешений только для чтения:

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system

Для доступа администратора: Например: для установки пакетов.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

После бега kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, а затем бега helm listя все еще получаюError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick

4

Сервисный аккаунт по умолчанию не имеет разрешений API. Скорее всего, Helm необходимо назначить учетную запись службы, а этой учетной записи службы предоставить разрешения API. См. Документацию RBAC для предоставления разрешений учетным записям служб: https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions


0
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
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 apply -f your-config-file-name.yaml

а затем обновите установку Helm, чтобы использовать serviceAccount:

helm init --service-account tiller --upgrade


0

Я получил эту ошибку при попытке установить tiller в автономном режиме, я думал, что у учетной записи службы tiller недостаточно прав, но оказалось, что сетевая политика блокирует связь между tiller и api-сервером.

Решением было создать сетевую политику для румпеля, разрешающую все исходящие коммуникации румпеля.


0

export TILLER_NAMESPACE=<your-tiller-namespace>решил это за меня, если <your-tiller-namespace>нет kube-system. Это указывает клиенту Helm на правое пространство имен Tiller.


0

Если вы используете кластер EKS от AWS и столкнулись с запрещенной проблемой ( например : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"тогда это сработало для меня:

Решение:

  1. Убедитесь, что вы настроили AWS
  2. Убедитесь, что настроенный пользователь имеет разрешение на доступ к кластеру.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.