Spring Cloud Kubernetes:什么是集群读取器权限?

Mic*_*ksa 4 kubernetes spring-cloud spring-cloud-kubernetes

根据Spring Cloud Kubernetes文档,为了在启用 RBAC 的 Kubernetes 发行版中发现服务/pod:

您需要确保使用 spring-cloud-kubernetes 运行的 pod 可以访问 Kubernetes API。对于您分配给部署/pod 的任何服务帐户,您需要确保它具有正确的角色。例如,您可以cluster-reader根据您所在的项目为您的默认服务帐户添加权限。

什么是cluster-reader发现服务/pod 的权限?

我收到的错误是:

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"
Run Code Online (Sandbox Code Playgroud)

Mic*_*ksa 9

阅读endpoints并且services似乎是 Spring Cloud Kubernetes 发现 pod 和服务的最低要求。

示例向命名空间中的default服务帐户添加权限default

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-read-role
rules:
- apiGroups:
  - ""
  resources:
  - endpoints
  - pods
  - services
  - configmaps
  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
Run Code Online (Sandbox Code Playgroud)


geo*_*and 5

Kubernetes 通常将角色分为两类:

  • 角色:这特定于授予它们的命名空间
  • ClusterRole:适用于整个集群,即适用于所有命名空间

那么,春季云Kubernetes文档的意思是,为了能够正确读取发现服务/所有的命名空间吊舱,其将与应用程序相关联的ServiceAccount应该有一个ClusterRole允许它读PodsServices等等。

Kubernetes 文档的这一部分(其中还包含很好的示例)是对 Kubernetes RBAC 有一般理解的必读之物。