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

时间:2019-02-12 16:17:15

标签: kubernetes spring-cloud spring-cloud-kubernetes

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

  

您需要确保与spring-cloud-kubernetes一起运行的pod可以访问Kubernetes API。对于您分配给部署/吊舱的任何服务帐户,都需要确保其具有正确的角色。例如,您可以根据您所在的项目向默认服务帐户添加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 个答案:

答案 0 :(得分:2)

Kubernetes通常将角色分为两种类型:

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

因此,Spring Cloud Kubernetes文档的意思是,为了能够正确读取所有命名空间中的发现服务/荚,将与应用程序关联的ServiceAccount应该具有一个ClusterRole来允许它阅读PodsServices等。

This是Kubernetes文档的一部分(其中也包含很多示例),对于全面了解Kubernetes RBAC是必不可少的。

答案 1 :(得分:0)

阅读endpointsservices似乎是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
  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