список кермів: не можна перераховувати конфігураційні карти в просторі імен "kube-система"


108

Я встановив штурвал 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, що, безумовно, виправить проблеми з дозволами, але може бути не потрібним виправленням. Краще створити власні облікові записи служб, (кластерні) ролі та (кластерні) рольові зв’язки з точними потрібними дозволами.
Кертіс Маттун

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", інші питання не згадують його.
skywing

Коли я бігаю, 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-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для генерування ямлів зі своєї графіки 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
Зверніть увагу: щойно ви зробите це, вам потрібно буде встановити всі команди шлемів з --tiller-namespace tiller-worldабо встановити TILLER_NAMESPACE=tiller-worldу вашому змінні середовища.
спудер

1
Повністю згоден з майбутнім підтвердженням відповіді. Шолом люди, здається, усвідомлюють, що RBAC-речі зробили речі надто складними для управління. Вони лише в альфа, але варто подивитися: Гельм 3, альфа 1
Річард

1
Домовились, RBAC - це трохи набагато спочатку. Я все ще борюся з цим, але прогресую.
coreyperkins

Чи створення Постійних обсягів є практикою прийняття керма? Чи слід створити ще одну роль кластера та обов'язковість для цього випадку?
Сойєр

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. Шлему, ймовірно, потрібно призначити обліковий запис служби, а цьому обліковому запису служби надано дозволи 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

а потім оновіть встановлення керма, щоб скористатися 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.