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.

Другие вопросы по тегам