Я сбит с толку. kubectl говорит, что могу (через kubectl auth can-i
подкоманда), но затем, когда я иду выполнить действие, я не могу.
Я установил kubectl
в образе докера, который работает в модуле, управляемом Deployment
. Когда я kubectl exec -it
в этот модуль (в котором есть только один контейнер) я получаю это.
user@my-pod:~$ kubectl auth can-i get secrets -n myNamespace
yes
user@my-pod:~$ kubectl get secrets -n myNamespace
Error from server (Forbidden):
secrets is forbidden:
User "system:serviceaccount:myNamespace:myServiceAccount"
cannot list resource "secrets" in API group "" in the namespace "myNamespace"
Вот как настроен мой сервисный аккаунт
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: myServiceAccount
namespace: myNamespace
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: myRole
namespace: myNamespace
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "describe"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myRoleBinding
namespace: myNamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: myRole
subjects:
- kind: ServiceAccount
name: myServiceAccount
namespace: myNamespace
Мне в первую очередь интересно узнать, использую ли я kubectl auth can-i
неправильно.
Во-вторых, я хотел бы иметь возможность авторизовать этот сервисный аккаунт для выполнения этого вызова API. В моем ямле неверная конфигурация?
Здесь происходит досадное столкновение между kubectl
с помощью get
в два разных пути, но can-i
использует его только в один путь. Список поддерживаемых глаголов для can-i
появляется на его справочная страница
Бег:
kubectl auth can-i get secrets -n myNamespace
спрашивает о get
глагол конкретно. Это эквивалент kubectl get secret my-awesome-secret
. Если вы хотите узнать о kubectl get secret
, который использует список глагол, и поэтому будет проверяться через:
kubectl auth can-i list secrets -n myNamespace
В этой таблице указаны различия: https://kubernetes.io/docs/reference/access-authn-authz/authorization/#determine-the-request-verb
Я считаю, что исправление для твоего Role
это обновить verbs:
также включить "list"
если вы хотите перечислить Secret
s
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "describe", "list"]