role.rbac.authorization.k8s.io запрещено даже добавлено в apiGroups - PullRequest
0 голосов
/ 04 января 2019

Я использую kubernetes v1.11.5 и устанавливаю helm с развертыванием румпеля для каждого пространства имен. Давайте сосредоточимся на одном пространстве имен. Это конфигурация учетной записи службы поддержки:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: marketplace-int
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: marketplace-int
rules:
- apiGroups:
  - ""
  - extensions
  - apps
  - rbac.authorization.k8s.io
  - roles.rbac.authorization.k8s.io
  - authorization.k8s.io
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-binding
  namespace: marketplace-int
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: marketplace-int
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io

Когда я пытаюсь развернуть диаграмму, я получаю эту ошибку:

Error: release citest failed: roles.rbac.authorization.k8s.io "marketplace-int-role-ns-admin" is forbidden: 
attempt to grant extra privileges: 
[{[*] [*] [*] [] []}] user=&{system:serviceaccount:marketplace-int:tiller 5c6af739-1023-11e9-a245-0ab514dfdff4 
[system:serviceaccounts system:serviceaccounts:marketplace-int system:authenticated] map[]} 
ownerrules=[{[create] [authorization.k8s.io] [selfsubjectaccessreviews selfsubjectrulesreviews] [] []} 
{[get] [] [] [] [/api /api/* /apis /apis/* /healthz /openapi /openapi/* /swagger-2.0.0.pb-v1 /swagger.json /swaggerapi /swaggerapi/* /version /version/]} 
{[*] [ extensions apps rbac.authorization.k8s.io roles.rbac.authorization.k8s.io authorization.k8s.io] [*] [] []}] ruleResolutionErrors=[]

Ошибка возникает при попытке создать конфигурацию rbac для этого пространства имен (с помощью команды tiller sa):

# Source: marketplace/templates/role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app: citest
    chart: marketplace-0.1.0
    heritage: Tiller
    release: citest
    namespace: marketplace-int
  name: marketplace-int-role-ns-admin
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]

В сообщении об ошибке четко сказано, что учетная запись службы tiller не имеет разрешения на roles.rbac.authorization.k8s.io, но это разрешение предоставляется, как показано ранее.

$kubectl describe role tiller-manager
Name:         tiller-manager
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"Role","metadata":{"annotations":{},"name":"tiller-manager","namespace":"marketplace-i...
PolicyRule:
  Resources                          Non-Resource URLs  Resource Names  Verbs
  ---------                          -----------------  --------------  -----
  *                                  []                 []              [*]
  *.apps                             []                 []              [*]
  *.authorization.k8s.io             []                 []              [*]
  *.extensions                       []                 []              [*]
  *.rbac.authorization.k8s.io        []                 []              [*]
  *.roles.rbac.authorization.k8s.io  []                 []              [*]

Честно говоря, я не до конца понимаю сообщение об ошибке, чтобы проверить, в порядке ли ownerrules, и я пытаюсь выяснить, что это означает, такого рода сообщения, которые, кажется, связаны с описанием роли: {[*] [*] [*] [] []}

Любая подсказка о том, какие разрешения мне не хватает?

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Вы должны иметь возможность создавать роли в том же пространстве имен. Я сам попробовал это, имея в виду создание роли с использованием той же роли, которую вы описали в своем вопросе, и я смог сделать это успешно (я изменил свое пространство имен для тестирования), поэтому я не думаю, что это связано с определением вашей роли, но как Тиллер использует эту специальную учетную запись для создания новых вещей.

# With an cluster-admin cluster role
$ echo '---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: test
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: test
rules:
- apiGroups:
  - ""
  - extensions
  - apps
  - rbac.authorization.k8s.io
  - roles.rbac.authorization.k8s.io
  - authorization.k8s.io
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-binding
  namespace: test
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: test
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io' | kubectl apply -f -

Тогда:

$ kubectl -n test describe secret tiller-token-xxxxx
Name:         tiller-token-xxxx
Namespace:    test
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: tiller

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  4 bytes
token:      <my-token>

Тогда:

$ mv ~/.kube ~/.kube.tmp
$ echo 'apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app: citest
    chart: marketplace-0.1.0
    heritage: Tiller
    release: citest
  namespace: test
  name: marketplace-int-role-ns-admin
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]' | kubectl -n test --token <your-token> --server <your-kubeapiserver> apply -f - 
role.rbac.authorization.k8s.io/marketplace-int-role-ns-admin created
0 голосов
/ 05 января 2019

Это связано с предотвращением повышения разрешений в RBAC. Подробнее см. https://kubernetes.io/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping.

Разрешение на создание объекта роли необходимо, но не достаточно.

Пользователь может создавать / обновлять роль, только если верно хотя бы одно из следующих условий:

  1. они уже имеют все разрешения, содержащиеся в роли, в той же области, что и изменяемый объект (для всего кластера для ClusterRole, в том же пространстве имен или для всего кластера для роли). В вашем случае это будет означать, что пользователь, пытающийся создать роль, должен уже иметь права доступа apiGroups=*, resources=*, verbs=* в пространстве имен, в котором он пытается создать роль. Это можно сделать, предоставив кластерную роль администратора кластера учетной записи службы в этом пространстве имен с привязкой роли.

  2. им дано явное разрешение на выполнение глагола "escalate" для ресурса role или clusterroles в группе API rbac.authorization.k8s.io (Kubernetes 1.12 и новее)

0 голосов
/ 04 января 2019

Сначала вам нужно дать разрешение кластера-администратора для tiller SA.

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: marketplace-int

Как только вы назначите роль администратора кластера для tiller SA, вы сможете создать эту роль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...