Spring Cloud Kubernetes:啥是集群读取器权限?
Posted
技术标签:
【中文标题】Spring Cloud Kubernetes:啥是集群读取器权限?【英文标题】:Spring Cloud Kubernetes: What are cluster-reader permissions?Spring Cloud Kubernetes:什么是集群读取器权限? 【发布时间】:2019-07-06 08:30:02 【问题描述】:根据Spring Cloud Kubernetes docs,为了在启用 RBAC 的 Kubernetes 发行版中发现服务/pod:
您需要确保使用 spring-cloud-kubernetes 运行的 pod 可以访问 Kubernetes API。对于您分配给部署/pod 的任何服务帐户,您需要确保它具有正确的角色。例如,您可以根据您所在的项目将
cluster-reader
权限添加到您的默认服务帐户。
为了发现服务/pod,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"
【问题讨论】:
【参考方案1】:阅读 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
【讨论】:
【参考方案2】:Kubernetes 通常将角色分为两类:
角色:特定于他们被授予的命名空间 ClusterRole:适用于整个集群,即适用于所有命名空间所以 Spring Cloud Kubernetes 文档的意思是,为了能够在所有命名空间中正确读取发现服务/pod,将与应用程序关联的 ServiceAccount 应该有一个 ClusterRole
允许它读取Pods
、Services
等
This Kubernetes 文档的一部分(其中还包含很好的示例)是了解 Kubernetes RBAC 的必读内容。
【讨论】:
以上是关于Spring Cloud Kubernetes:啥是集群读取器权限?的主要内容,如果未能解决你的问题,请参考以下文章
正在使用 Kubernetes Spring Cloud 多个配置映射
spring-cloud-kubernetes官方demo运行实战
部署 spring-cloud-kubernetes kubernetes-hello-world-example 失败