Предоставление разрешения учетной записи службы Kubernetes для секретов?
У меня есть служебная учетная запись, которой я хотел бы предоставить разрешения на чтение / запись / обновление / удаление секретов в определенном пространстве имен. Мне не ясно, как именно учетные записи служб, роли, привязки и т. Д. Работают вместе, чтобы предоставить необходимые разрешения.
Какие kubectl
вызовы или YAML мне нужно сделать, чтобы предоставить эти разрешения учетной записи службы?
Вот YAML для учетной записи службы, которую я имею до сих пор:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2018-10-09T17:45:20Z
name: testaccount
namespace: test
resourceVersion: "369702913"
selfLink: /api/v1/namespaces/test/serviceaccounts/testaccount
uid: f742ed5c-c1b3-11e8-8a69-0ade4132ab56
secrets:
- name: testaccount-token-brjxq
2 ответа
Вам нужно создать Роль и Ролевую привязку.
Создать роль:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: test
name: role-test-account
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
Создайте привязку роли:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-test-account-binding
namespace: test
subjects:
- kind: ServiceAccount
name: test-account
namespace: test
roleRef:
kind: Role
name: role-test-account
apiGroup: rbac.authorization.k8s.io
Вы можете прочитать больше об использовании авторизации RBAC
Итак, у вас есть SA testaccount
, Давайте предположим, что ваше приложение (которое манипулирует секретами) имеет изображение контейнера myorg/myapp:01
, Тогда вы запустите его следующим образом:
$ kubectl -n test run myapp \
--image=myorg/myapp:01 \
--serviceaccount=testaccount
Но как насчет разрешений? Ну, на самом деле не имеет значения, делаете ли вы это до или после запуска приложения, но в какой-то момент времени выполните:
$ kubectl create clusterrole secretmanipulator \
--verb=get --verb=list --verb=watch \
--verb=create --verb=update --verb=patch --verb=delete \
--resource=secrets
$ kubectl -n test create rolebinding allowsecretmanipulation \
--clusterrole=secretmanipulator \
--serviceaccount=test:testaccount
Обратите внимание, что я создал кластерную роль выше и использовал привязку роли, чтобы присоединить ее к вашей SA. Зачем? Это более пригодно для повторного использования. Конечно, здесь также будет работать простая роль, но тогда вам нужно будет заново создать ее для каждого пространства имен.