Spring Cloud Kubernetes: что такое разрешения для чтения кластеров?
Согласно документации Spring Cloud Kubernetes, для обнаружения служб / модулей в RBAC включены дистрибутивы Kubernetes:
вам нужно убедиться, что модуль, работающий с spring-cloud-kubernetes, имеет доступ к API Kubernetes. Для любых учетных записей служб, которые вы назначаете для развертывания / модуля, вам необходимо убедиться, что они имеют правильные роли. Например, вы можете добавить
cluster-reader
разрешения для вашей учетной записи службы по умолчанию в зависимости от проекта, в котором вы находитесь.
Что cluster-reader
разрешения для обнаружения услуг / модулей?
Ошибка, которую я получаю:
io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://x.x.x.x/api/v1/namespaces/jx-staging/services.
Message: Forbidden!Configured service account doesn't have access.
Service account may have been revoked. services is forbidden:
User "system:serviceaccount:jx-staging:default" cannot list services in the namespace "jx-staging"
2 ответа
Читать endpoints
а также services
Похоже, что Spring Cloud Kubernetes - это минимум возможностей для поиска пакетов и сервисов.
Пример добавляет права на default
учетная запись службы в default
Пространство имен.
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-read-role
rules:
- apiGroups:
- ""
resources:
- endpoints
- pods
- services
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-read-rolebinding
subjects:
- kind: ServiceAccount
name: default
namespace: default
roleRef:
kind: ClusterRole
name: cluster-read-role
apiGroup: rbac.authorization.k8s.io
Кубернетес обычно делит роли на два типа:
- Роль: это характерно для пространства имен, которому они предоставлены
- ClusterRole: применяется ко всему кластеру, что означает, что он применяется ко всем пространствам имен
Итак, что означают документы Spring Cloud Kubernetes, так это то, что для правильного чтения служб / модулей во всех пространствах имен необходимо, чтобы ServiceAccount, который будет связан с приложением, имел ClusterRole
что позволяет ему читать Pods
, Services
и т.п.
Эта часть документации Kubernetes (которая также содержит отличные примеры) является обязательной для общего понимания RBAC Kubernetes.