尝试弄清楚如何设置RBAC以从自定义指标API读取。
我有一个向Kubernetes公开自定义指标的服务。
/apis/custom.metrics.k8s.io/v1beta1/namespaces/{ns}/services/{svc}/{metric}
端点工作正常,这不是问题所在。
我还有另一个服务,它的作用是检索这些指标并对其进行操作。这在权限不是问题的本地计算机上正常工作,但部署后就不是问题了,这就是问题所在。
为了消除怀疑...部署确实有一个ServiceAccount
,还有一个ClusterRole
和一个ClusterRoleBinding
。
那么......这就是我的ClusterRole
目前的样子(我肯定里面已经有不必要的东西了)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: the-thing
rules:
- apiGroups:
- apps
resources:
- deployments
verbs:
- get
- list
- patch
- watch
- apiGroups:
- ""
resources:
- endpoints
- namespaces
- nodes
- pods
- services
verbs:
- get
- list
- apiGroups:
- custom.metrics.k8s.io
resources:
- "*"
verbs:
- "*"
我以为这会归结为custom.metrics.k8s.io
组,但显然不是。
如果有人有任何建议,帮助是非常感谢!
1条答案
按热度按时间k4emjkb11#
好吧...回答我自己的问题...
我正在测试服务帐户,看看我是否错过了什么,但它似乎确实有我想要的权限,我用
can-i
工具检查了一下。这就指出了请求本身的一些问题,因为我已经确认容器使用的是正确的服务帐户。
更多背景信息:为此,我使用dotnet client,要检索指标,必须使用
Kubernetes
示例中的通用HttpClient
。这在本地是有效的,因为不需要凭据,但在集群内部,凭据必须在
HttpRequestMessage
中设置,然后才能处理,而这部分丢失了。因为我直接使用
HttpClient
,所以在请求之前没有设置凭据,实际上,我直接调用GetAsync
而不是构造请求消息,设置凭据之后,请求就可以工作了。希望这能帮助到一些人...